int ORDtype=-1, ORDtime=0;double ORDprofit;for(int i=OrdersHistoryTotal()-1; i>=0; i--){if(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){if(OrderSymbol()==Symbol()){if(OrderCloseTime()!=0&&OrderCloseTime()> ORDtime){
ORDtime=OrderCloseTime();
ORDtype=OrderType();
ORDprofit=OrderProfit();}}}}//........if( ORDtype==-1){// В истории не нашлось подходящих ордеров}if( ORDtype==OP_SELL){// Последним был закрыт Sell}
if( ORDtype==OP_BUY){// Последним был закрыт Buy}
//+------------------------------------------------------------------+// Проверка последнего ордера по условию |//+------------------------------------------------------------------+bool LastCloseOrd(string Sy ="",//Если Sy=="" на принадлежность символу не проверяемint Type =-1,//Если Typ==-1 любой тип ордераint Magic =-1,//Если Magic=-1любой магикint Pr_Ls =0){//Если Pr_Ls =0 без проверки на профит, если <0 то фильтр лосевых , если >0 то фильтр профитных ордеровint time=0;if(OrdersHistoryTotal()<1){return(false);}//Если нет закрытых ордеров выходим for(int i=0; i<OrdersHistoryTotal(); i++){//Перебираем закрытые ордераif(OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)){//Выбираем ордер из историиif(OrderCloseTime()!=0){//Если ордер уже закрытif( Sy==""||OrderSymbol()== Sy){//если совпадает символ, или нет проверки на символif( Type==-1||OrderType()== Type){//если совпадает тип, или нет проверки на типif( Magic==-1||OrderMagicNumber()== Magic){//если совпадает магик , или не проверки на магикif(OrderCloseTime()> time){//если время закрытия ордера больше чем предыдущее
time=OrderCloseTime();//записываем время закрытия (в конце цикла у нас в ловушке булет сидеть последний закрытый ордер} //попадающий под все условия выставленных фильтров)}}}}}}if( Pr_Ls==0&&time!=0){return(true);}//если нет условия на профит-лосс подтверждаем наличие ордераif( Pr_Ls<0&&OrderProfit()<0){return(true);}//если ордер лосевый подтверждаем наличие ордераif( Pr_Ls>0&&OrderProfit()>0){return(true);}//если ордер профитный подтверждаем наличие ордераreturn(false);//нет ни одного попадающего под выставленные условия ордера}
後でコードの一部を掲載しますが、チェックボックスがあった方がカッコイイと思うのですが、mql4ではどう書けばいいのでしょうか?
https://book.mql4.com/ru/variables/arrays
この章の最後に、新しいバーを形成する事実を例に、フラグの使用原理が非常によく説明されている。同様に、例えばBuy_AllowedやSell_Allowedのように、特定のタイプの取引を開く可能性を示すbool型の変数を2つ作成します。デフォルトでは、これらの変数にtrueの値を割り当てています。買いシグナルが発生し、ポジションを開くことができた場合、Buy_Allowed=falseとします。この場合、OrderSend()の前に、Buy_Allowed=trueの場合のみ買い取引が実行されるという条件を追加しています。逆信号を受信した場合、Buy_Allowed=trueのフラグを破棄します。同じ方式が売り取引にも使用されますが、Sell_Allowedフラグが使用されます。
https://book.mql4.com/ru/variables/arrays
この章の最後に、新しいバーを形成する事実を例にして、フラグの使用原理を非常によく説明している。類似の方法として、例えばBuy_AllowedとSell_Allowedのように、特定のタイプの取引の開始を許可することを示すbool型の2つの変数を作成します。デフォルトでは、これらの変数にtrueの値を割り当てています。買いシグナルが発生し、ポジションを開くことができた場合、Buy_Allowed=falseとします。この場合、OrderSend()の前に、Buy_Allowed=trueの場合のみ買い取引が実行されるという条件を追加します。逆信号を受信した場合、Buy_Allowed=trueのフラグを破棄します。同じ方式が売り取引にも使用されますが、Sell_Allowedフラグが使用されます。
ありがとうございます。前回の記事でコードの一部を掲載しました。
このサイトからDaydream EAをダウンロード済みです。テスト時は最大ロット0.1、残高1万円でした。Meta Trader 4 222のGBPUSD 15でテストしてみました。
2つ目の質問:テストレポートにある「エラーの不一致」とは何ですか?
3つ目の質問ですが、なぜシグナルが出ないのでしょうか? これは1つ目の質問と何らかの関係がある、つまりプログラムの中で何かが不具合を起こしているという印象です。 EURUSD M1 MACD Sample(標準装備)を使っていますが、MACD OpenLevelを1まで下げても何も出なかったのです。
使い方がわからない。
ありがとうございます、教育していきます。前回の記事でコードの一部を掲載しました。
あなたのコードの作業バージョン。なぜなら、チェック (OrderCloseTime()>time) がないと、全体の意味が失われるからです。検索中の各注文の終了時刻を、先に見つかった注文のうち最も古い時刻と比較して、最新の終了した注文を選択しているのです。ORDprofitの条件もありましたが、それは自分で追加してください。:)
はい、最後の注文で利益が出た場合、同じ方向への注文を禁止するようにしました :)
どうもありがとうございました!!))
第2問:テストレポートにおける「不一致エラー」とは何か?
何度も聞かれる、検索しやすいように...。
Meta Trader 4 222でGBPUSD 15を使ってみました。 面白いことに、別のPCで1ロットのテストはOKでした。 何がトリックなのでしょうか?
もしかしたら、他のPCのMT4は他のブローカーの口座に接続されていて、ブローカーも違えば取引条件も違うかもしれない...。それともEAがランダムにロットを決定しているのでしょうか?)Expert Advisorのコード、ステートメントが必要な場合があり、正確な答えが得られます。
私の印象では、最初の質問と何らかの関係がある、つまり、プログラムの中で何かが不具合を起こしているようです。 EURUSD M1 MACD Sample(標準装備)を使って、MACD OpenLevelを1まで下げてみましたが、何も出ませんでした。
テスターのことならテスターのログを見てください。パラメータのセットと、テストEAの結果(シグナルがないところ)を投稿する。プログラムの不具合ではなく、経験不足によるクラッチの不具合のようです...。
一つの選択肢として:
取引開始時にbool変数NeedAlertをtrueに設定する。ありがとうございます、そして私はそれが動作しないだろうと思った - ループが動作しないように - それは私が中括弧を忘れて判明した))
ありがとうございます、教育していきます。前回の記事でコードの一部を掲載しました。
テスターのエラーについてです......。
どなたかご存知の方、アドバイスをお願いします...。
64.37と65.37という数字はどういう意味なのか?