またろうのシストレブログ

マネックス証券が提供しているトレードステーションと、MT4などシストレ関連について色々書きます。株と自動売買、EasyLanguageについても。

魅惑のスキャルピングトレード



今回は前回作った板チャート(ITA_AVG)でストラテジーを組んでみます。

ロジックは移動平均線大循環分析でストラテジーを組んだ時とほぼ一緒です。

関数ITA_AVGが必要です。
tsukinowakabu.hatenablog.jp

[Intrabarordergeneration = true];

inputs: 
	ShortAvg(5),
	MidAvg(25),
	LongAvg(50),
	Geta(10);
	
vars: 
	IntrabarPersist Answer(0),
	IntrabarPersist AnswerMid(0),
	IntrabarPersist AnswerSlow(0),
	IntrabarPersist UpFlg(0),
	IntrabarPersist DownFlg(0);

Answer = ITA_AVG(ShortAvg);
AnswerMid = ITA_AVG(MidAvg);
AnswerSlow = ITA_AVG(LongAvg);

UpFlg = 0;
IF Answer > AnswerMid + Geta and AnswerMid > AnswerSlow and Answer > Answer[1] and AnswerMid > AnswerMid[1] and AnswerSlow > AnswerSlow[1] then UpFlg = 1;

DownFlg = 0;
if Answer < AnswerMid - Geta and AnswerMid < AnswerSlow and Answer < Answer[1] and AnswerMid < AnswerMid[1] and AnswerSlow < AnswerSlow[1] then DownFlg = 1;

If MarketPosition = 0 and ((0900 < TIME and TIME < 1120) or (1230 < TIME and TIME < 1450)) then 
begin

	IF UpFlg = 1 then
	BEGIN
		Print(GetSymbolName, "買い", TIME);
		Buy ( !( "買い" ) ) next bar at market;
	end;

	IF DownFlg = 1 then
	BEGIN
		Print(GetSymbolName, "空売り", TIME);
		Sellshort ( !( "空売り" ) ) next bar at market;
	end;
	
end;

IF MarketPosition = 1 then
BEGIN
	IF Answer < AnswerMid and Answer < Answer[1] and AnswerMid < AnswerMid[1] then
	BEGIN
		Print(GetSymbolName, "売り抜け", TIME);
		Sell ( !( "売り抜け" ) ) next bar at market;
	end;
end;

IF MarketPosition = -1 then
BEGIN
	IF Answer > AnswerMid and Answer > Answer[1] and AnswerMid > AnswerMid[1] then
	BEGIN
		Print(GetSymbolName, "買い戻し", TIME);
		BuyToCover ( !( "買い戻し" ) ) next bar at market;
	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;

スキャルピングなのでチャート分析の足種設定を1ティックにします。
(それ以外の設定でも使えないこともないですが)

f:id:tsukinowaapp:20180704102940j:plain

例によって任天堂[7974]で前場一杯回してみますが...
f:id:tsukinowaapp:20180704113436p:plain
手数料考えたら駄目だこれ。

欠点が…

困ったことに欠点がいくつかあります。

バックテストができない

売り気配買い気配の情報はリアルタイムデータと言って
ログに残らない仕様になってます。
なので、過去のデータを使ったバックテストはできません。

手数料が高い

放置しておくと時間まで際限なく取引を行うので、
前場だけで取引100回とか)
手数料が半端ないことになります。
取引回数をカウントして規定回数以上は行わないようなロジックを追加した方が良いかもしれません。

一日信用導入されないかなー? :-)