InteractiveRectangleDrawer.java

注意事項:
サンプルソースコードには実際にオーダーを発注するものがあります。
サンプルソースコードのストラテジーを起動する場合は、注意して下さい。



// Copyright (c) 2009 Dukascopy (Suisse) SA. All Rights Reserved.
package charts.test;

import java.util.*;

import javax.swing.SwingConstants;
import com.dukascopy.api.*;
import com.dukascopy.api.drawings.*;

public class InteractiveRectangleDrawer implements IStrategy {
    private IConsole console;
    private IHistory history;
    private IChart   chart;

    private Instrument instrument = Instrument.EURUSD;
    private Period     period     = Period.TEN_SECS;

    public void onStart(IContext context) throws JFException {
        this.console = context.getConsole();
        this.history = context.getHistory();
        chart         = context.getChart(instrument);

    }

    public void onAccount(IAccount account) throws JFException {    }
    public void onMessage(IMessage message) throws JFException {    }
    public void onStop() throws JFException {    }
    public void onTick(Instrument instrument, ITick tick) throws JFException {    }

    // 各バーに長方形オブジェクトを新規追加する
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {

        if (chart == null || !period.equals(this.period) || !instrument.equals(this.instrument))
            return;

        IBar prevBar = history.getBar(instrument, this.period, OfferSide.BID, 2);

        InteractiveRectangle rectangle = new InteractiveRectangle(
                                             "click herev",  
                                             prevBar.getTime(),
                                             prevBar.getClose(),
                                             bidBar.getTime(),
                                             bidBar.getClose()
                                         );

        rectangle.addToChart();
    }

    private String getKey(String str) {
        return str + UUID.randomUUID().toString().replace('-', '0');
    }

    private void print(String message) {
        console.getOut().println(message);
    }

    // 長方形オブジェクトにラベルとイベントハンドラを追加
    class InteractiveRectangle {

        private ILabelChartObject label;
        private IRectangleChartObject rectangle;

        public InteractiveRectangle( String caption, long time1, double price1, long time2, double price2 ) {

            IChartObjectFactory factory = chart.getChartObjectFactory();

            // 長方形オブジェクト追加
            rectangle = factory.createRectangle(
                            getKey("rectangle"),
                            time1,
                            price1,
                            time2,
                            price2
                        );

            // ラベルオブジェクト追加
            label = factory.createLabel(
                        getKey("label"),
                        getLabelTime(),
                        getLabelPrice()
                    );

            label.setText(caption, SwingConstants.LEFT);

            // イベント時の動作を設定
            rectangle.setChartObjectListener(new ChartObjectAdapter() {
                @Override
                public void deleted(ChartObjectEvent e) {
                    print("オブジェクト削除:キー = " + rectangle.getKey());
                    // ラベルオブジェクト削除
                    chart.remove(label);
                }

                @Override
                public void selected(ChartObjectEvent e) {
                    print("オブジェクト選択:キー = " + rectangle.getKey());
                }

                @Override
                public void moved(ChartObjectEvent e) {
                    // 長方形の中央にラベルを移動
                    label.setPrice(0, getLabelPrice());
                    label.setTime(0, getLabelTime());
                }                
            });
        }

        public void addToChart() {
            chart.addToMainChartUnlocked(rectangle);
            chart.addToMainChartUnlocked(label);
        }

        // 長方形の時間中央位置を取得
        private long getLabelTime(){
            return (rectangle.getTime(1) - rectangle.getTime(0))/2 +  rectangle.getTime(0);
        }

        // 長方形の価格中央位置を取得
        private double getLabelPrice(){
            return (rectangle.getPrice(1) - rectangle.getPrice(0))/2 +  rectangle.getPrice(0);
        }

    }
}



10秒毎にラベル付きの長方形オブジェクトが作成されます。

長方形オブジェクトをダブルクリックして選択するとログ出力されます。
選択した長方形オブジェクトを削除すると、対象のラベルも削除されログ出力されます。
選択した長方形オブジェクトを移動すると、対象のラベルも一緒に移動します(ログ出力しません)。





スポンサーリンク

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


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


Top

inserted by FC2 system