トレステは、マルチチャートと言って複数のチャートを一つの画面に表示して
それぞれのチャートの状態を見ながら特定の株の売買をするという芸当が出来ます。
今日はマルチチャートを使ってTOPIXの値動きを見ながら
ETF(今回は[1570]NEXT FUNDS 日経平均レバレッジ上場投信)を売買するストラテジーを組んでみます。
何故TOPIX?
[1570]NEXT FUNDS 日経平均レバレッジ上場投信は、
日経平均株価の上昇・下降に合わせて株価が変動するETFですが
日経平均株価は5秒ごとの更新に対し
TOPIXは1秒ごとの更新で、チャートの動きがほぼ一致しているのでこちらを採用しています。
もちろん日経平均株価を見ながらETFの売買をすることも可能です。
チャートの設定
ストラテジーを組み込む前に、ワークスペースの下準備が必要です。
ワークスペースにチャート分析を組み込んだら、取引したい銘柄コードを設定
今回は5秒足にしておきます。
(マルチチャートはティック足に対応していません)
「挿入」→「銘柄コード」を押下
銘柄コードにTOPIXのコード($0000-TS)を入力、「プロット」を押下
こんな感じになるかと思います。
売買高は見ないので「分析テクニックの設定」で削除するか、「状態」押下でオフにしておきましょう。
マルチチャートに分析テクニックを設定する方法
多くの人はマルチチャートに分析テクニックを設定したいかと思います。
そのまま設定すると、最初に設定したチャート(一番上)に適用されるので
適用したいチャートを指定する必要があります。
「挿入」→「インジケーター」で任意のチャートを選択
画面右クリック→「分析テクニックの設定」で挿入したチャートを洗濯して「設定」
「一般」タブを押下して「参照チャート」のプルダウンをクリックして、設定したいほうのチャートを選択した上で「OK]
これで切り替わります。
ストラテジー
ストラテジーは以前組んだものを改造して使ってみます。
[Intrabarordergeneration = false]; inputs: AvgType(0), MAGeta(0.1), MALength1(5), MALength2(20), MALength3(40), MACD3SLength(20), MACD3LLength(40); vars: IntrabarPersist DaijunkanFlg(0), IntrabarPersist double MA1(0), IntrabarPersist double MA2(0), IntrabarPersist double MA3(0), IntrabarPersist macd3(0), IntrabarPersist CloseData(Close of Data2); CloseData = Close of Data2; //Daijunkan macd3 = MACD(CloseData, MACD3SLength, MACD3LLength); IF AvgType = 0 then BEGIN MA1 = XAverage( CloseData, MALength1 ); MA2 = XAverage( CloseData, MALength2 ); MA3 = XAverage( CloseData, MALength3 ); END ELSE BEGIN MA1 = AverageFC( CloseData, MALength1 ); MA2 = AverageFC( CloseData, MALength2 ); MA3 = AverageFC( CloseData, MALength3 ); END; DaijunkanFlg = 0; IF MA1 > MA2 + MAGeta and MA2 > MA3 and MA1 > MA1[1] and MA2 > MA2[1] and MA3 > MA3[1] and macd3 > macd3[1] then DaijunkanFlg = 1; IF MA1 < MA2 - MAGeta and MA2 < MA3 and MA1 < MA1[1] and MA2 < MA2[1] and MA3 < MA3[1] and macd3 < macd3[1] then DaijunkanFlg = -1; // If MarketPosition = 0 and ((0900 < time and TIME < 1120) or (1230 < TIME and TIME < 1450)) then BEGIN if DaijunkanFlg = 1 then BEGIN Buy (!("買いスタート")) next bar at market; END; if DaijunkanFlg = -1 then BEGIN Sellshort (!("空売りスタート")) next bar at market; END; END; // IF MarketPosition <> 0 then BEGIN if MarketPosition = 1 then BEGIN IF MA1 < MA2 and MA1 < MA1[1] then BEGIN Sell (!("売り抜け")) next bar at market; END; END; if MarketPosition = -1 then BEGIN IF MA1 > MA2 and MA1 > MA1[1] then BEGIN BuyToCover (!("買い戻し")) next bar at market; END; END; END; if TIME >= 1125 and TIME < 1130 then Begin if MarketPosition = 1 then BEGIN Print(GetSymbolName, "指定時間売り抜け(午前)", TIME); Sell ( "指定時間売り抜け(午前)" ) next bar at market; end; if MarketPosition = -1 then BEGIN Print(GetSymbolName, "指定時間買い戻し(午前)", TIME); BuyToCover ( "指定時間買い戻し(午前)" ) next bar at market; end; End; if TIME >= 1455 then Begin if MarketPosition = 1 then BEGIN Print(GetSymbolName, "指定時間売り抜け(午後)", TIME); Sell ( "指定時間売り抜け(午後)" ) next bar at market; end; if MarketPosition = -1 then BEGIN Print(GetSymbolName, "指定時間買い戻し(午後)", TIME); BuyToCover ( "指定時間買い戻し(午後)" ) next bar at market; end; End;
ほぼ一緒ですが終値(Close)などの四本値を使用する場合、参照するチャートを指定する必要があります。
CloseData = Close of Data2;
(Close) of DataNで使用するチャートを指定します。
(末尾は数字です)
何番目のチャートを参照するか、を指定します。
チャートが3つ以上ある場合はData3、Data4...という感じです。
毎回指定するのは面倒なので
変数を用意して、Closeを代入してそれを使用するのが楽かと思います。
とりあえす20日分(2018/06/11~2018/07/06)のバックテストをしてみます。
単元数は100株で。
どうしても間隔の早い足(5秒)にすると
取引だけ偉く増えて、大した利益にならない感じになりますね。
なので1分足にして、最適化してみます。
取引の回数は大幅に減りましたが、買い取引が微妙な結果に。
マルチチャートを使う際の注意
チャートの制約
マルチチャートにする場合は、時間足(月~秒)のみで、ティック足は設定できません。
銘柄ごとに出来高が異なるので当然ではありますが。
取引の制約
取引は最初に設定した一番上の銘柄(Data1)のみ行えます。
1つのチャート分析で複数の銘柄に対して取引は行えません。