MainRemote.java

注意事項:
サンプルソースコードには実際にオーダーを発注するものがあります。
サンプルソースコードのストラテジーを起動する場合は、必ずデモ口座で行ってください。



/*
 * Copyright (c) 2009 Dukascopy (Suisse) SA. All Rights Reserved.
 * 
 * ソースまたはバイナリ形式での使用及び再配布は、修正の有無にかかわらず許可されているが、
 * 以下の条件が満たされている必要があります。
 * 
 * -ソースコードの再配布は上記著作権を表示し、この条件リスト及び免責事項を守らなければなりません。
 * -バイナリ形式(または他形式)での再配布は、上記著作権を表示し、この条件リスト及びドキュメントの以下免責事項を守らなければなりません。
 * 
 * デューカスコピー(スイス) SA の名前と再配布者の名前のいずれかは、
 * 書面による事前許可無しに本ソフトウェアから派生した製品を促進する為に使用する事が出来ます。
 * 
 * 
 * このソフトウェアはいかなる動作保証無しで提供しています。
 * 以下略(↓このソフトで何が起きても、自己責任でお願いしますという事が書かれています)。
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. DUKASCOPY (SUISSE) SA ("DUKASCOPY")
 * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
 * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL DUKASCOPY OR ITS LICENSORS BE LIABLE FOR ANY LOST 
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY 
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 
 * EVEN IF DUKASCOPY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 */
package singlejartest;

import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.dukascopy.api.Instrument;
import com.dukascopy.api.strategy.IStrategyManager;
import com.dukascopy.api.strategy.IStrategyResponse;
import com.dukascopy.api.strategy.IStrategyDescriptor;
import com.dukascopy.api.strategy.StrategyListener;
import com.dukascopy.api.strategy.remote.IRemoteStrategyDescriptor;
import com.dukascopy.api.strategy.remote.IRemoteStrategyManager;
import com.dukascopy.api.strategy.remote.RemoteStrategyListener;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import com.dukascopy.api.system.ISystemListener;

//このプログラムは、デューカスコピークライアントの初期化と、ストラテジー開始のデモンストレーションを行います

public class MainRemote {

    private static final Logger LOGGER = LoggerFactory.getLogger(MainRemote.class);
    private static String jnlpUrl = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
    private static String userName = "mzd";
    private static String password = "mzd";

    private static UUID myStrategyId;

    public static void main(String[] args) throws Exception {
        final IClient client = ClientFactory.getDefaultInstance();
        client.setSystemListener(new ISystemListener() {
            private int lightReconnects = 3;

            @Override
            public void onStart(long processId) {
                LOGGER.info("ストラテジー起動: " + processId);
            }

            @Override
            public void onStop(long processId) {
                LOGGER.info("ストラテジー停止: " + processId);
                if (client.getStartedStrategies().size() == 0) {
                    System.exit(0);
                }
            }

            @Override
            public void onConnect() {
                LOGGER.info("接続完了");
                lightReconnects = 3;
            }

            @Override
            public void onDisconnect() {
                LOGGER.warn("切断されました");
                if (lightReconnects > 0) {
                    LOGGER.error("再接続を試みます。残り: " + lightReconnects);
                    client.reconnect();
                    --lightReconnects;
                } else {
                    try {
                        // 10秒間スリープしてから再接続します
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        // 無視します
                    }
                    try {
                        client.connect(jnlpUrl, userName, password);
                    } catch (Exception e) {
                        LOGGER.error(e.getMessage(), e);
                    }
                }
            }
        });

        LOGGER.info("接続中…");
        // jnlp, user , passwordでサーバーに接続します
        client.connect(jnlpUrl, userName, password);

        // 接続待ち処理
        int i = 10; // 最大で10秒間待ちます
        while (i > 0 && !client.isConnected()) {
            Thread.sleep(1000);
            i--;
        }
        if (!client.isConnected()) {
            LOGGER.error("デューカスコピーのサーバーに接続出来ませんでした");
            System.exit(1);
        }

        Set<Instrument> instruments = new HashSet<Instrument>();
        instruments.add(Instrument.EURUSD);
        LOGGER.info("通貨ペア登録…");
        client.setSubscribedInstruments(instruments);

        File jfxFile = new File("src/singlejartest/MA_Play.jfx");
        if (!jfxFile.exists()) {
            LOGGER.error(jfxFile + " jfxファイルが見つかりません。ストラテジーをコンパイルするか、別のパスを選択して下さい。");
            System.exit(1);
        }

        final IRemoteStrategyManager remoteManager = client.getRemoteStrategyManager();

        remoteManager.addStrategyListener(new RemoteStrategyListener() {

            public void onStrategyRun(IRemoteStrategyDescriptor descriptor) {
                LOGGER.info("リモートストラテジー起動: " + descriptor);
                if (!descriptor.getId().equals(myStrategyId)) {
                    LOGGER.info("リモートストラテジーが指定されていません。");
                    remoteManager.stopStrategy(descriptor.getId());
                }
            };

            public void onStrategyStop(IRemoteStrategyDescriptor descriptor) {
                LOGGER.info("リモートストラテジー停止: " + descriptor);
            };
        });

        // IDフェッチ無しでストラテジーを実行
        remoteManager.startStrategy(jfxFile , true );

        // 実行とIDフェッチ
        IStrategyResponse<UUID> startResponse = remoteManager.startStrategy(jfxFile  , true ).get();
        if (startResponse.isError()) {
            LOGGER.error("リモートストラテジー開始エラー: " + startResponse.getErrorMessage());
        } else {
            myStrategyId = startResponse.getResult();
            LOGGER.info("リモートストラテジー開始成功: " + myStrategyId);
        }

        Set<IRemoteStrategyDescriptor> strategyDescriptors = remoteManager.getStartedStrategies().get().getResult();
        LOGGER.info(strategyDescriptors.size() + " ストラテジーはリモートスタートしました。: ");
        for (IStrategyDescriptor strategyDescriptor : strategyDescriptors) {
            LOGGER.info(strategyDescriptor.toString());
        }

    }
}



サンプルコードを実行するには、MA_Play.jfxを用意する必要があります。
JForexでMA_Play.javaをコンパイルして、生成されたjfxをIDEのMainRemote.javaソースを置いてあるディレクトリにコピーします。






スポンサーリンク

スポンサーリンク
検索
リファレンスツリー


Copyright ©2016 JForexAPIで自動売買させ隊! All Rights Reserved.


Top

inserted by FC2 system