トレステは、マルチチャートと言って複数のチャートを一つの画面に表示して
それぞれのチャートの状態を見ながら特定の株の売買をするという芸当が出来ます。
今日はマルチチャートを使ってTOPIXの値動きを見ながら
ETF(今回は[1570]NEXT FUNDS 日経平均レバレッジ上場投信)を売買するストラテジーを組んでみます。
チャートの設定
ストラテジーを組み込む前に、ワークスペースの下準備が必要です。
ワークスペースにチャート分析を組み込んだら、取引したい銘柄コードを設定
今回は5秒足にしておきます。
(マルチチャートはティック足に対応していません)
「挿入」→「銘柄コード」を押下
銘柄コードにTOPIXのコード($0000-TS)を入力、「プロット」を押下
こんな感じになるかと思います。
売買高は見ないので「分析テクニックの設定」で削除するか、「状態」押下でオフにしておきましょう。
マルチチャートに分析テクニックを設定する方法
多くの人はマルチチャートに分析テクニックを設定したいかと思います。
そのまま設定すると、最初に設定したチャート(一番上)に適用されるので
適用したいチャートを指定する必要があります。
「挿入」→「インジケーター」で任意のチャートを選択
画面右クリック→「分析テクニックの設定」で挿入したチャートを洗濯して「設定」
「一般」タブを押下して「参照チャート」のプルダウンをクリックして、設定したいほうのチャートを選択した上で「OK]
これで切り替わります。
ストラテジーは以前組んだものを改造して使ってみます。
tsukinowakabu.hatenablog.jp
[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つのチャート分析で複数の銘柄に対して取引は行えません。
ストラテジーの制約
いわゆるイントラバー取引(ティックごとに判定し、条件成立したら発注する)は行えません。
足が完成したタイミングで判定し、条件が成立したら取引するロジックになります。
損切やトレールストップを織り込みたいなら
SetStopLossやSetPercentTrailingなどのコマンドを活用ください。
(こちらは足の途中でも発注されます)