記事"MQL5でExpert Advisorを書くための初心者向けステップバイステップガイド"についてのディスカッション - ページ 17

 
とても素晴らしい!ありがとう!
 

ファイルをダウンロードしてコードをデバッグしたところ、次のような警告が表示されました。


OrderSend'の戻り値をチェックする必要があります。


 

こんにちは、私もロボットをテストしている初心者です。

これを試してみてください:

//OrderSend(mrequest,mresult);

bool res=OrderSend(mrequest,mresult);

// 結果コードを取得する

if(res && (mresult.retcode==10009 || mresult.retcode==10008)) //リクエストが完了したか、注文が発注されました。

{

Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!");

}

else

{

Alert("買い注文リクエストを完了できませんでした -エラー:",GetLastError());

ResetLastError();

を返します;

}

間違っていたら訂正してください!

調査元:https://www.mql5.com/en/forum/23663

return value of 'OrderSend' should be checked
return value of 'OrderSend' should be checked
  • 2014.05.03
  • www.mql5.com
Hi ! I'm wondering how to do that ...:/ the warning appeared @ the last update...
 

デバッグをしていると、注文を送信するときにいつもエラーが出ます。私のコードのせいかと思いましたが、ダウンロード用のmql5ファイルをテストしてもエラーになります。



 
northedan:

デバッグをしていると、注文を送信するときにいつもエラーが出ます。私のコードのせいかと思いましたが、ダウンロード用のmql5ファイルをテストしてもエラーになります。



例題は通貨でのものなので、0.1というロット変数はあなたのテストには適していないと思いますので、次のように変更してみてください(mrequest.volume変数を変更):


double minSymbolLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);

mrequest.action = TRADE_ACTION_DEAL; // 即時注文実行

mrequest.price = NormalizeDouble(latest_price.ask,_Digits); // 最新のアスク価格

mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // ストップロス

mrequest.tp = NormaliseDouble(latest_price.ask + TKP*_Point,_Digits); // テイクプロフィット

mrequest.symbol = _Symbol; // 通貨ペア

mrequest.volume = minSymbolLot; // 取引ロット数

mrequest.magic = EA_Magic; // 注文マジックナンバー

mrequest.type = ORDER_TYPE_BUY; // 買い注文

mrequest.type_filling =ORDER_FILLING_FOK; // 注文執行タイプ

mrequest.deviation=100;

 
このEAをミニインデックスや ミニダラーに使えるかどうか、どなたかご存知ですか?
 
Sella170:
このEAをミニインデックスやミニドルに使えるかどうかご存知の方はいらっしゃいますか?

ストラテジーを理解しましたか?リスクを認識していますか?SLとTPのレベルを分析しましたか?使用されているテクニカル指標をご存知ですか?パラメーターの設定方法をご存知ですか?各資産(WINとWDO)の変数をカスタマイズする方法を知っていますか?

コード自体はどのような資産にも対応できるように開発されており、"_Symbol "と任意のチャート時間"_Period "で識別できます。

ここで重要なのは、EAを実行する 際に何をしているのかを知っておくことです。もしそうするのであれば、ツールを使いこなし、株式市場に対する理解が深まるまでは、デモ口座でのみ作業することをお勧めします。

[ ]'s

 

みんな、

複数の注文が同時にオープンしてエラーが発生した場合の簡単な修正コードです。

次のコードを置き換えてください: 167行目から177行目まで

   if(PositionSelect(_Symbol)==true) // オープンしたポジションがある
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //これは買いだ
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // それは売りである
        }
     }

をこのコードに置き換えてください:

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //これは買いだ
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // それは売りである
           }
        }
      }

ありがとうございます

 
Korobejnik:

問題を解決する方法を教えてください。Expert Advisorが買いのポジションを複数連続してオープンし、売りも同様です。

コードにチェックがあるにもかかわらず、Expert Advisorはすでに買いポジションと 売りポジションが開いていることに気づかず、新しいポジションを開いてしまいます。

コードにチェックがあるにもかかわらず、売りと買いのポジションがすでにオープンされていることに気づかず、新しいポジションをオープンしてしまいます。このチェックはなぜか機能しません。

ここでは荒らしのモデレーターの助けは得られないので、英語のフォーラムからの回答をコピーしておきます:

みんな、複数の注文が同時にオープンしてエラーが発生した場合の、簡単な修正可能コードだ。このコードを置き換えてください: 167行目から177行目まで

   if(PositionSelect(_Symbol)==true) // オープン・ポジション
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true;  //これは買いだ
        }
      else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
        {
         Sell_opened=true; // それは売りである
        }
     }

これを

   int total= PositionsTotal();
   for(int i=0;i<total;i++)
     {
      if(PositionGetSymbol(i)==_Symbol);
        {
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            Buy_opened=true;  //これは買いだ
           }
         else if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; // それは売りである
           }
        }
      }
 
Locus_Neminis:

ここではトロールモデレーターの助けは得られないので、英語フォーラムからの回答をコピーしておこう:

みんな、複数の注文が同時に開くとエラーが出る場合の簡単な修正可能コードだ。このコードを置き換えてください。

このコードに置き換えてください:

これは役に立ちません。私のプロフィールにこの件に関するスレッドがあります。そこに問題の 原因と解決 策があります。
荒らしについては理解できません。