FX に限らず相場において損益比をできるだけ大きくすることは、重要とされる。曰く「相場は、上がるか下がるかどちらかだ。下手な取引をするくらいなら、損益比を1対3以上にしてサイコロを振ってエントリー方向を決めた方がいい。」
そこで、MT4の自動売買を使って検証してみた。
サイコロトレード
ロジックは、単純。疑似乱数で偶数なら買いエントリー、奇数なら売りエントリー。ポジション保有中は、新規追加なし。通貨ペアは、テクニカル分析が効きやすいドルストレートでボラティリティが大きいポンドドルの5分足。スプレッド 5pips。損切りは、25pips 固定。これは、簡単には損切りにかからず利確がありえない値にならない現実的なポイントとして決めた。サイコロトレードにおいて重要なのは、損益比であとはテキトーで良いと考えるからだ。また利確は、25pips から25刻みで125pips まで損益比1対1から1対5までを想定。概要が知りたいだけなので、2019年6月中の始値のみで検証。
まずは、利確 25pips
そして、50pips
続いて、75pips
100pips
最後に 125pips
見ての通り、どれも利益になっていない。良くてトントンといったところ。確かな優位性が見られないのは、損切り幅にあるやもしれん。てことで、5pips 刻みで150pips までで最適化してみた。最もプロフィットファクターが良かったのが損切り 140pips 利確 70pips って、思いっきり利小損大なトレード とはいえ、あくまでカーブフィッティングの結果。なので、この値で2019年5月を検証すると
と、ここまで書いていて思い至ったのが、確率を語る上で大数の法則は外せない。ならば、期間を揃えることと取引回数を揃えること両方必要?!
期間は、上記の通り。なので以下、取引回数100回で検証。
サイコロトレード100回
基本的には、上記と同じ疑似乱数での取引。2019年6月開始。取引100回を満たすため、5分足始値取引。損切りは、25pips固定。
まずは、利確25pips
そして、利確50pips
続いて、利確75pips
利確100pips
最後に、125pips
以上のように、見事に右肩下がりのグラフ。5分足だとエントリーポイントが似すぎているかもと、1時間足でやった結果が↓
25pips
50pips
75pips
100pips
125pips
5分足よりかは、変化のあるグラフなるも右肩下がりなのは変わらず。
ついでに利確125pipsで1度に1取引、つまり利確するまで新規ポジションは、取らないパターン。2019年4月から6月まで取引回数91回。
サイコロトレード結論
損益比だけのサイコロトレードでは、負ける。
まぁ、想定通りの結果ですな。これで勝てるなら、EAが負けるはずがない。上記先人の発言は、無意識の裁量判断が働いてサイコロを振るタイミングがそもそも絞られている。もしくは、試行回数が少ないためタマタマ良い結果だった、とか。確かに最初の検証トレードでも損益比1対4は、途中まで右肩上がりのグラフである。
コンパイル済みのEAファイルはこちらサイコロトレード。1取引1ポジで検証する時は、Count -1 に設定。あくまで検証用のEAなので、これで本番トレードは決してしないように。
//+------------------------------------------------------------------+
//| DiceTrade.mq4 |
//| Copyright 2019, weblog |
//| https://weblog.4141.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, weblog"
#property link "https://weblog.4141.biz"
#property description "サイコロを振って、偶数なら買い・奇数なら売り"
#property description "損益比で勝てるのか検証する。"
#property description "1取引1ポジで検証:Count -1"
#property version "1.01"
#property strict
//--- input parameters
input int TakeProfit=250;
input int StopLoss=250;
input int Count=100;
input double Lot=0.1;
int count = Count;
void DiceTrade (){
if( rand()%2 == 0 ){
OrderSend( _Symbol, OP_BUY, Lot, Ask, 3, Ask-StopLoss*Point,
Ask+TakeProfit*Point, NULL, 12345, 1 );
} else {
OrderSend( _Symbol, OP_SELL, Lot, Bid, 3, Bid+StopLoss*Point,
Bid-TakeProfit*Point, NULL, 12345, 1 );
}
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
if( count > 0 ){
DiceTrade();
count--;
}
if( count < 0 ){
if( OrdersTotal() == 0 ){
DiceTrade();
}
}
}
//+------------------------------------------------------------------+
コメントを残す