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

 
Expert Advisorsのバグを修正することができないので、設定を変更できるように、市場に参入 し、終了するまでの時間を書きたいのですが、
ファイル:
 
michael sedgley:
MQL5プログラミングのすべての変更に伴い、このステップ・バイ・ステップ・コードの更新版が必要です。

こんにちは、マイケル、

コメントありがとうございます。ご指摘を検討し、コードの更新が必要であれば、すぐに利用できるようにします。

 

なぜエラーコード 10030を出力するのですか?

ファイル:
2.png  74 kb
 

どなたかいらっしゃいませんか?


なぜエラーコード:10030を出力するのですか?

 

mql5プログラミングを始めるにあたり、とても参考になりました。

あなたのコードを試してみましたが、OnInit()のコードの中に、その目的が理解できないものがありました:

//--- 4桁ではなく、5桁または3桁の価格の通貨ペアを処理しましょう。

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

この部分は、利食いと損切りのピブの値を変更し、入力した値と実際に使用されている値との間に差異を生じさせます。

しかし、ifの中の2行を削除すると、注文をサーバーに送信する際に、しばしばエラー10016(無効なストップ)が発生します。最初の注文の試みはうまくいき、10009が出ますが、その後ほとんどの場合10016が出ます。EAをデバッグしてみましたが、ストップロスとテイクプロフィットはすべて正常のようで、ストップロスは30か300、テイクプロフィットは現在価格より 100か1000ピブ上か下かの違いです。

STPとTKPが10倍されていないときにサーバーが10016というエラーを出す理由がわかりません。

なぜこのようなエラーが発生するのか、または_Digitsが5または3であるときに10倍する目的について、どなたか教えてください。

よろしくお願いします。

 
an you please guguqiaqia:

どなたかいらっしゃいませんか?


なぜエラーコード:10030を出力するのですか?

こんにちは、

どのようにエラーが発生したか教えていただけますか?

 

エシェリオス


mql5プログラミングを始めるにあたり、とても参考になりました。

あなたのコードを試してみましたが、OnInit()のコードの中に、その目的が理解できないものが少しありました:

//--- 4桁ではなく、5桁または3桁の価格の通貨ペアを処理しましょう。

STP = StopLoss;

TKP = TakeProfit;

if(_Digits==5 || _Digits==3)

{

STP = STP*10;

TKP = TKP*10;

}

この部分は、利食いと損切りのピブの値を変更し、入力した値と実際に使用されている値との間に差異を生じさせます。

しかし、ifの中の2行を削除すると、注文をサーバーに送信する際にエラー10016(無効なストップ)がよく発生します。最初の注文の試みはうまくいき、10009が出ますが、その後ほとんどの場合10016が出ます。EAをデバッグしてみましたが、ストップロスとテイクプロフィットはすべて正常のようで、ストップロスは30か300、テイクプロフィットは現在価格より 100か1000ピブ上か下かの違いです。

STPとTKPが10倍されていないときにサーバーが10016というエラーを出す理由がわかりません。

どなたか、なぜこのようなエラーが発生するのか、または_Digitsが5または3であるときに10倍する目的について教えてください。

よろしくお願いします。

こんにちは、

まず、あなたの説明から、これらのコード行を削除したときにエラーが発生し、ストップロス/テイクプロフィットの値に10を掛けなかったときにエラーが発生するのですね?これにより、これらのコード行が非常に重要であることが説明されたと思います。

記事に戻ると、これらのコードの行は、小数点以下5桁(0.XXXXX)または小数点以下3桁(0.XXX)の通貨ペアのチャートを使用している場合に必要であると説明されています。

Digits または Digits()は、現在のチャートシンボルの価格の精度を決定する小数点以下の桁数を返します。5桁または3桁の価格チャートの場合、ストップロスとテイクプロフィットの両方に10を掛けます

以下の例を参照してください:

小数点以下5桁価格

5 - 小数桁数 価格

3 - 小数桁価格

3 - 小数桁価格

ご質問の答えになっていれば幸いです。

 
Samuel Olowoyo:

こんにちは、

エラーの発生方法を教えていただけますか?

step 1: このサンプルコードをダウンロードしてください。

step 2: mql5でコンパイルします。

step 3:mt5でチャート eurusd 1mを開き、"auto trading "をクリックします。

ステップ4:コード行223,224などにブレークシンボルを設定する。

step 5:mt5でデバッグ開始ボタンをクリックし、このエラーを表示する。

 
 guguqiaqia:

step 1: このサンプルコードをダウンロードする。

ステップ2:mql5でコンパイルする。

ステップ3:mt5で、チャート eurusd 1mを開き、"auto trading "をクリックする。

ステップ4:コード行223,224などにブレークシンボルを設定する。

step 5:mt5でデバッグ開始ボタンをクリックすると、このエラーが表示されます。

こんにちは、

手順を教えていただきありがとうございます。コードに戻りましょう、

if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
{
   Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
}
else
{
   Alert("The Buy order request could not be completed -error:",GetLastError());    // line 223
   ResetLastError();                                                                // line 224
   return;

私の知る限り、コードは想定されたとおりに実行されました。あなたがエラーを出したのは、発注しようとした注文がうまくいかなかったからで、223行目がそうするはずだったのです。このエラーの意味を知るには、https://www.mql5.com/ja/docs/constants/errorswarnings/enum_trade_return_codes を読んでください(実際には、10030 はInvalidorder filling type です)。

注文入力タイプ -ORDER_FILLING_FOK - が何を意味するのかを理解するには、 - をお読みください。

mrequest.type_filling = ORDER_FILLING_FOK; // Order execution type  ( line 213 )

意味については、https://www.mql5.com/ja/docs/constants/tradingconstants/orderproperties#enum_order_type_filling をお読みください。

質問の答えになっていれば幸いです。

 

Samuelさん、こんにちは、

コードをダウンロードし、インストールして実行したところ、条件を満たしたローソク足(時間枠としてH1を使用しています)ごとに売買注文が 発注されていることに気づきました。

デバッグをしなかったところ、コードの一部がトリガーされていないことに気づきました。皆さんは、ダウンロード可能なコードでEAを正しく動作させることができますか?

ファイル:
screen.jpg  417 kb