//+------------------------------------------------------------------+//| Place Market Order function |//+------------------------------------------------------------------+bool PlaceMarketOrder(int oper, double lot, double oop, double sl, double tp) { // mn - Magic Numberdouble d_sl=0, d_tp=0;
MqlTick stTick;
if (SymbolInfoTick(_Symbol,stTick)==false) {
Print("SymbolInfoTick function returned FALSE. Error=", GetLastError());
}
Print("Placing market order. Type="+(string)oper+", OrderOpenPrice="+DoubleToString(oop,_Digits)+
", Bid="+DoubleToString(_bid,_Digits)+", Ask="+DoubleToString(_ask,_Digits));
if (MathAbs(lot-Lot)<1 e-5) {MartinCounterB=0; MartinCounterS=0;}
if (oper==OP_BUY) {
for (int i=0; i<5; i++) {
if (SymbolInfoTick(_Symbol,stTick)==false) {
Print("SymbolInfoTick function returned FALSE. Error=", GetLastError());
}
_ask=stTick.ask;
d_sl=ND(_ask-sl*pips); if (MathAbs(sl)<1 e-5) d_sl=ND(0.0);
d_tp=ND(_ask+tp*pips); if (MathAbs(tp)<1 e-5) d_tp=ND(0.0);
if (m_trade.Buy(NormalizeLot(lot),NULL,_ask,d_sl,d_tp,Comm)) {PlaySound("expert.wav"); return(true);}
else {PlaySound("disconnect.wav"); Sleep(5000);}
}
}
if (oper==OP_SELL) {
for (int i=0; i<5; i++) {
if (SymbolInfoTick(_Symbol,stTick)==false) {
Print("SymbolInfoTick function returned FALSE. Error=", GetLastError());
}
_bid=stTick.bid;
d_sl=ND(_bid+sl*pips); if (MathAbs(sl)<1 e-5) d_sl=ND(0.0);
d_tp=ND(_bid-tp*pips); if (MathAbs(tp)<1 e-5) d_tp=ND(0.0);
if (m_trade.Sell(NormalizeLot(lot),NULL,_bid,d_sl,d_tp,Comm)) {PlaySound("expert.wav"); return(true);}
else {PlaySound("disconnect.wav"); Sleep(5000);}
}
}
return(false);
}
//+------------------------------------------------------------------+
新しいバーのオープンを制御する機能。
//+------------------------------------------------------------------+//| Global Variables |//+------------------------------------------------------------------+bool IsBarNew=false;
//+------------------------------------------------------------------+//| Bar refreshing function |//| true - new bar opened, false - not opened |//+------------------------------------------------------------------+bool IsNewBar() {
staticdatetime SavedTime=iTime(NULL,PERIOD_CURRENT,0);
datetime curTime =iTime(NULL,PERIOD_CURRENT,0);
if (curTime>SavedTime) {
SavedTime=curTime;
return(true);
}
elsereturn(false);
}
//+------------------------------------------------------------------+
......
EAは動くのですが、エディターで開こうとすると
......
実行ファイルではなく、mq5ファイルなのですが...。
これが私のコードです...
だから、フレーズを正しく形成してください。
トピックについて私は通常、このような問題のあるものをメモ帳++で開いています。助かります。しかし、いつもそうとは限りません )))
だから、フレーズを正しく形成してください。
トピックについて私は通常、このような問題のあるものをメモ帳++で開いています。助かります。しかし、いつもそうとは限りません )))
また、Notepad++で目を通すことにしたのですが、本来なら通常のファイルサイズなのに、ほとんどゼロになっていました...。
EAを書きました。書いた相手は、1本目で、2つのポジションを次々に開けていくんです。この問題は自分では再現できません。 お願いしたいことがあります。
OnTick()関数
CheckForOpen() 関数のみが、ポジションを開く役割を果たします。
マーケットからポジションを開く要求を送信する関数です。MetaQuotes MT5デモでテストしているとrequote/offquoteがよく出るので、サーバークラッシュ時の遅延リプレイを入れました。
新しいバーのオープンを制御する機能。
2つ目のポジションは、1つ目のポジションの直後に開き、同じ秒数で、刻みは1つずつ異なります。最初は2つ目のチャートに2つ目のEAがあるのかと思い、全部閉じて1つのチャートを残してEAを動かしてくださいとお願いしましたが、お客様のお話やスクリーンショットから判断すると、そういうわけではなさそうです。後続のポジションは1つずつオープンされ、重複はありません。再現できない、もう頭を抱えた。私のMT5デモのICMarketsのヘッジでも、発注者と同様にテストしています。ダブレットのスクリーンショット。
EA全体。
EAを書きました。書いた相手は、1本目で、2つのポジションを次々に開けていくんです。この問題は自分では再現できません。お願いしたいことがあります。
OnTick()関数
CheckForOpen() 関数のみが、ポジションを開く役割を果たします。
マーケットからポジションを開く要求を送信する関数です。MetaQuotes MT5デモでのテスト中にリクエスト/オフクオートを受けることが多かったので、サーバークラッシュ時の遅延リプレイを入れました。
新しいバーのオープンを制御する機能。
2つ目のポジションは、1つ目のポジションの直後に開き、同じ秒数で、刻みは1つずつ異なります。最初は2つ目のチャートに2つ目のEAがあるのかと思い、全部閉じて1つのチャートを残してEAを動かしてくださいとお願いしましたが、お客様のお話やスクリーンショットから判断すると、そういうわけではなさそうです。後続のポジションは1つずつオープンされ、重複はありません。再現できない、もう頭を抱えた。私のMT5デモのICMarketsのヘッジでも、発注者と同様にテストしています。ダブレットのスクリーンショット。
EA全体。
私はこの機能を使って新しいバーを 制御しています。バーの日付をコピーするときにエラーが発生することがあります。
私はこのような機能を使って新しいバーを 制御しています。バーの日付をコピーするときにエラーが発生することがあります。
ありがとうございます。交換してみようと思います。今のところ、私が使っている機能も問題なく動作していますが。プリントにバーのオープンタイムと価格を表示させれば、エラーがあることがはっきりわかると思います。
しかし、最初のポジションのオープン時にのみデュプロットが表示され、それ以降のポジションは正しくオープンされ、EAが何時間も何十ものデュプロットを生成して動作することに困惑しています。また、バーの開閉制御の機能は毎回動作します。そして、その条件に従って、Expert Advisorは何もないときに最初のポジションを開き、最初のポジションが開かれた後、価格が十分に動いたときにのみ次のポジションを開くのです。
EAを書きました。書いた相手は、1本目で、2つのポジションを次々に開けていくんです。この問題は自分では再現できません。お願いしたいことがあります。
OnTick()関数
CheckForOpen() 関数のみが、ポジションを開く役割を果たします。
マーケットからポジションを開く要求を送信する関数です。MetaQuotes MT5デモでのテスト中にリクエスト/オフクオートを受けることが多かったので、サーバークラッシュ時の遅延リプレイを入れました。
新しいバーのオープンを制御する機能。
2つ目のポジションは、1つ目のポジションの直後に開き、同じ秒数で、刻みは1つずつ異なります。最初は2つ目のチャートに2つ目のEAがあるのかと思い、全部閉じて1つのチャートを残してEAを動かしてくださいとお願いしましたが、お客様のお話やスクリーンショットから判断すると、そういうわけではなさそうです。後続のポジションは1つずつオープンされ、重複はありません。再現できない、もう頭を抱えた。私のMT5デモのICMarketsのヘッジでも、発注者と同様にテストしています。ダブレットのスクリーンショット。
EA全体。
また、このバーですでにポジションが開かれて いないことを確認するにはどうすればよいのでしょうか。
また、このバーでまだどのポジションも開いて いないことをどのように確認するのでしょうか?
いいえ、そのようなチェックはありません。
そんなチェックがあるのです。
いいえ、そのようなチェックはありません。
そんなチェックがあるのです。
そこで何が起こっているのか、分析する時間はない。しかし、新しいバーでオープンポジションの 数を確認するようにしてください。そうでない場合 - 開いてください。