質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

Q&A

0回答

910閲覧

バックテスト時に注文や決済がされない時があります

wtp

総合スコア2

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

0グッド

0クリップ

投稿2021/05/23 11:34

編集2021/05/23 11:43

前提

mql4で、D期間とK期間を引き延ばしたストキャスティクスの
メイン線とシグナル線がクロスした時に注文と決済を行うEAを作っているのですが、
線がクロスしているにもかかわらず注文や決済が行われていない時があります。
決済できてない時は暫くしてから再びクロスした時に決済されているので、何が間違えているのか分らない状態です。

該当のソースコード

mql4

1//+------------------------------------------------------------------+ 2//| MALineCloss.mq4 | 3//| Copyright 2021, MetaQuotes Software Corp. | 4//| https://www.mql5.com | 5//+------------------------------------------------------------------+ 6#property copyright "Copyright 2021, MetaQuotes Software Corp." 7#property link "https://www.mql5.com" 8#property version "1.00" 9#property strict 10//--- input parameters 11input int DPeriod=25; 12input int KPeriod=75; 13input int Slow = 3; 14 15//--- parameters 16double Pips; 17int Slippage; 18int BuyTicket; 19int SellTicket; 20double lot = 0.1; 21int Magic = 0001; 22//+------------------------------------------------------------------+ 23//| Expert initialization function | 24//+------------------------------------------------------------------+ 25int OnInit() 26 { 27//--- 28 Pips = PipPoint(_Symbol); 29 Slippage = GetSlippage(_Symbol, 10); 30 31 for(int i=0; i<OrdersTotal(); i++) 32 { 33 if(OrderSelect(i, SELECT_BY_POS) && 34 OrderSymbol() == _Symbol && OrderMagicNumber() == Magic) 35 { 36 if(OrderType() == OP_BUY) 37 BuyTicket = OrderTicket(); 38 if(OrderType() == OP_SELL) 39 SellTicket = OrderTicket(); 40 } 41 } 42//--- 43 return(INIT_SUCCEEDED); 44 } 45//+------------------------------------------------------------------+ 46//| Expert deinitialization function | 47//+------------------------------------------------------------------+ 48void OnDeinit(const int reason) 49 { 50//--- 51 52 } 53//+------------------------------------------------------------------+ 54//| Expert tick function | 55//+------------------------------------------------------------------+ 56void OnTick() 57 { 58//--- 59 double MainStochastics0 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 0, 0); 60 double SignalStochastics0 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 1, 0); 61 double MainStochastics1 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 0, 1); 62 double SignalStochastics1 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 1, 1); 63 double MainStochastics2 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 0, 2); 64 double SignalStochastics2 = iStochastic(_Symbol, 0, KPeriod, DPeriod, Slow, 0, 0, 1, 2); 65 66 int BuyPos = 0; 67 int SellPos = 0; 68 if(OrderSelect(BuyTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0) 69 if(OrderType() == OP_BUY) 70 BuyPos = 1; 71 72 if(OrderSelect(SellTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0) 73 if(OrderType() == OP_SELL) 74 SellPos = 1; 75 76 if(MainStochastics0 >= SignalStochastics0 && 77 MainStochastics1 < SignalStochastics1) 78 { 79 if(BuyPos == 0) 80 BuyTicket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrYellow); 81 } 82 83 if(MainStochastics0 <= SignalStochastics0 && 84 MainStochastics1 > SignalStochastics1) 85 { 86 if(SellPos == 0) 87 SellTicket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrYellowGreen); 88 } 89 90 bool ret; 91 if(MainStochastics0 <= SignalStochastics0 && 92 MainStochastics1 > SignalStochastics1) 93 { 94 if(BuyPos == 1) 95 { 96 ret = OrderClose(BuyTicket, OrderLots(), OrderClosePrice(), Slippage, clrAquamarine); 97 if(ret) 98 BuyPos = 0; 99 } 100 } 101 102 if(MainStochastics0 >= SignalStochastics0 && 103 MainStochastics1 < SignalStochastics1) 104 { 105 if(SellPos == 1) 106 { 107 ret = OrderClose(SellTicket, OrderLots(), OrderClosePrice(), Slippage, clrAquamarine); 108 if(ret) 109 SellPos = 0; 110 } 111 } 112 } 113 114//+------------------------------------------------------------------+ 115//| | 116//+------------------------------------------------------------------+ 117double PipPoint(string Currency) 118 { 119 double CalcPoint = 0; 120 int CalcDigits = (int)MarketInfo(Currency, MODE_DIGITS); 121 if(CalcDigits == 2 || CalcDigits == 3) 122 CalcPoint = 0.01; 123 else 124 if(CalcDigits == 4 || CalcDigits == 5) 125 CalcPoint = 0.0001; 126 return(CalcPoint); 127 } 128 129//+------------------------------------------------------------------+ 130//| | 131//+------------------------------------------------------------------+ 132int GetSlippage(string Currency, int SlippagePips) 133 { 134 int CalcSlippage= 0; 135 int CalcDigits = (int)MarketInfo(Currency, MODE_DIGITS); 136 if(CalcDigits == 2 || CalcDigits == 4) 137 CalcSlippage = SlippagePips; 138 else 139 if(CalcDigits == 3 || CalcDigits == 5) 140 CalcSlippage = SlippagePips * 10; 141 return(CalcSlippage); 142 } 143//+------------------------------------------------------------------+ 144 145//+------------------------------------------------------------------+ 146 147

試したこと

OrderCloseの後にOrderSendを書いてみたり、決済の条件を前後させてみたりしましたが上手くいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問