記事"MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第8部): 注文およびポジション変更イベント"についてのディスカッション

 

新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第8部): 注文およびポジション変更イベント はパブリッシュされました:

前の記事では、MetaTrader 5とMetaTrader 4プラットフォーム用のプログラムの開発を単純化するための大規模なクロスプラットフォームライブラリの作成を始めました。第7部では、StopLimit注文の発動の追跡を追加し、注文とポジションを含む他のイベントを追跡するための機能を準備しました。本稿では、注文とポジションの変更イベントを追跡するためのクラスを開発します。

EAをコンパイルしましょう。
ストップレベルなしでポジションをオープンし未決注文を出すには、StopLoss in pointsTaleProfit in pointsの値を0に設定します。StopLoss for modification (points)TakeProfit for modification (points)をそれぞれ20 60 に設定します(デフォルト値)。これらのレベルはボタンを押して設定します。
テスターでEAを起動して未決注文を設定します。次に、ストップロスとテイクプロフィットを設定するためのボタンを順番に押します。レベルが設定され、適切なエントリが操作ログに表示されます。次に、トレーリングを有効にして注文が価格に従っていることを確認し、適切なエントリが操作ログに表示されるようにします。注文によって発動されたポジションのストップロスレベルがトレールされ、適切なエントリーが操作ログに表示されます。

ネッティング口座


ヘッジ勘定

作者: Artyom Trishkin

 

こんばんは、アルテム。あなたは永遠に生き、学び続ける!そして私は、あなたの作品を方法論の材料として学び続けている。 あなたの多大な労力と経験に感謝する。

もちろん、誤解がないわけではありませんし、正確に言えば、学べば学ぶほど、わからないことが増えていきます。

添付のファイルで、私はあなたのExpert Advisor TestDoEasyPart08を修正し、カスタムインディケータ、またあなたのiCrossADを追加しようとしました。

iCustom(asymbol.Name(), _Period, "iCrossAD")関数を使いました;

   CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD");
   if (CrossAD == INVALID_HANDLE)
   {
      Print("iCrossADインジケーター記述子の作成に失敗しました!");
      return(INIT_FAILED);
   }

それから、インジケーターからEAのバッファにデータをコピーして、どの程度うまくできたかチェックしてみました。

void OnTick()
  {
//+------------------------------------------------------------------+//////////////////////////////
   int      buf_size = 30;
   double   Buf_Arrow_Sell[], Last_Arrow_Sell;
   double   Buf_Arrow_Buy[], Last_Arrow_Buy;
   
   ArraySetAsSeries(Buf_Arrow_Sell, true);
   ArraySetAsSeries(Buf_Arrow_Buy, true);
   
   if (CopyBuffer(CrossAD, 3, 0, buf_size, Buf_Arrow_Sell) != buf_size || ArraySize(Buf_Arrow_Sell) != buf_size)
   {  
      Print("iCrossADからのデータコピーに失敗しました");
      return;
   }
      else Last_Arrow_Sell = Buf_Arrow_Sell[0];
   
   if (CopyBuffer(CrossAD, 2, 0, buf_size, Buf_Arrow_Buy) != buf_size || ArraySize(Buf_Arrow_Buy) != buf_size)
   {  
      Print("iCrossADからのデータコピーに失敗しました");
      return;
   }
      else Last_Arrow_Buy = Buf_Arrow_Buy[0];
      
//+------------------------------------------------------------------+
Comment("フラクタルデータの出力", 
         "\n Last_Arrow_Buy     = ",Last_Arrow_Buy,
         "\n ---------------------- ",
         "\n Last_Arrow_Sell    = ",Last_Arrow_Sell
         ); 
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//////////////////////////////

どこが間違っているのか、どうすればいいのか教えてください。

ファイル:
 
このアイデアは、TestDoEasyPart08またはその将来のより強力な修正をベースとして 使用し、様々なインジケータからのデータを追加し、それらの組み合わせに応じて、 プログラム的/仮想的にボタンをクリックして取引を管理 し、取引の経過が端末の管理者を喜ばせない場合は、同じボタンとマウスを使用して手動で介入することができます。
 
Sergey Voytsekhovsky:

こんばんは、アルテム。あなたは永遠に生き、学び続ける!そして私は、あなたの作品を方法論の材料として学び続けている。

もちろん、誤解がないわけではないし、もっと正確に言えば、学べば学ぶほどわからなくなる。

添付のファイルは、貴殿のExpert Advisor TestDoEasyPart08を修正し、カスタムインジケーター、またiCrossADを追加しようとするものです。

iCustom(asymbol.Name(), _Period, "iCrossAD")という関数を使いました;

そして、インジケータからEAバッファにデータをコピーし、どの程度うまくできたかをチェックしました。

このトリックはすべてうまくいきません。どこが間違っているのか、どうすれば本当にうまくいくのか教えてください。

"動作したくない" - 具体的に何が動作しないのですか?

これは私がグローバルレベルで行うことです:

   int      buf_size = 30;
   double   Buf_Arrow_Sell[], Last_Arrow_Sell;
   double   Buf_Arrow_Buy[], Last_Arrow_Buy;

これはOnInit()の中です:

   ArraySetAsSeries(Buf_Arrow_Sell, true);
   ArraySetAsSeries(Buf_Arrow_Buy, true);

そして、インジケータがゼロ・バーでバッファに値を持つかどうかをチェックします。どのバーで何を出すかは覚えていません。

 
  • "具体的に何がうまくいっていないのでしょうか?"- 現段階では、コメントにあるインジケーターの最後の上矢印と下矢印の値を見ようとしています。これができれば、時間軸で比較できるようになり、どちらが最後か、つまり「現在」がわかるようになります。これは、値を変更するときのシグナルとして、あるいは他のシグナルのフィルター(できる/できない)として考えることができる。しかし、ここで困ったことに、これらの値をコメントに入れることができない。さらに、コメント自体が見えない。

  • 「グローバル レベルではこうする。- 移動して、なぜそうなるのかを理解しようとした!

  • "これはOnInit(): ... "でやることです。- ありがとう、覚えておくよ。

  • "そして、インジケータがゼロ・バーでバッファに値を持つかどうかをチェックする - ..."- インジケーター内のコメントを整理して、インジケーターを動かして値そのものを目で確認しようと思いますが、その場合、1つのチャートにどのように表示されるのでしょうか?別のチャートでインジケータを起動する?

  • "ゼロ・バーのみでチェックする..."- 矢印で配列にアクセスすると、ほとんど常に空の値が表示され、まれに矢印が描画された ときに値が空でないことがあります。そこで、インジケーター側で最後のシグナルを切り替えるか、ループを実行して、Expert Advisorで最初の空でない値までの最後の値を書き出す必要があるのでしょうか?つまり、インジケータ側と全く同じスイッチですか?

なぜ表示されないのか理解できません!

ファイル:
 
Sergey Voytsekhovsky:
  • "具体的に何がうまくいっていないのか...?"- 現段階では、コメントにあるインジケーターの最後の上矢印と下矢印の値を見ようとしています。これができれば、時間軸で比較できるようになり、どちらが最後か、つまり「現在」がわかるようになります。これは、値を変更するときのシグナルとして、あるいは他のシグナルのフィルター(できる/できない)として考えることができる。しかし、ここで困ったことに、これらの値をコメントに入れることができない。さらに、コメント自体が見えない。

  • 「これは私がグローバルレベルで行うことです" - 移動して、なぜこのようになるのかを理解しようとしました!

  • 「これはOnInit()の中です。

  • "そして、インジケータがゼロ・バーでバッファに値を持つことがあるかどうかをチェックする - ..."- インジケータ内のコメントを整理して、インジケータを起動して値そのものを目で確認しようと思いますが、その場合、1つのチャートにどのように表示されるのでしょうか?別のチャートでインジケータを起動する?

  • "ゼロ・バーのみでチェックする..."- 矢印で配列にアクセスすると、ほとんど常に空の値が表示され、まれに矢印が描画された ときに値が空でないことがあります。だから、インジケータ側で最後のシグナルを切り替えるか、ループを回して、空でない最初のシグナルまでの最後の値を書き出すか、どちらかをする必要がある。つまり、インジケータ側と全く同じスイッチですか?

なぜ表示されないのか理解できません!

Experts" ログには何が書かれていますか?インジケータのハンドルは作成されていますか?

 
Artyom Trishkin:

エキスパート」ジャーナルには何が書かれていますか?インジケーターのハンドルは作成されますか?

こんにちは。はい、ハンドルは作成されています。

少し前進しました(とても少し!)。コメント・ レコードがあります。

Print()レコードがあります。


2019.05.19 17:31:13.127 2018.01.02 00:00:00 ハンドル iCrossAD = 10

2019.05.19 17:31:13.580 2018.01.02 09:00:00 iCrossADインジケータの第2バッファからデータをコピーしました。

2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308

2019.05.19 17:31:13.580 2018.01.02 09:00:00 iCrossADインジケータの第3バッファからデータをコピーしました。

2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308

2019.05.19 17:31:13.580 2018.01.02 09:00:20 iCrossADインジケータの第2バッファからデータをコピーしました。

2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308

2019.05.19 17:31:13.581 2018.01.02 09:00:20 iCrossADインディケータの第3バッファからデータをコピーしました。

2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308


データがコピーされるインジケータ内の2つのバッファには、インジケータの矢印が設定される値が入っています。これらは矢印が設定された瞬間に書き込まれます。したがって、矢印が設定された瞬間に二重価格で埋められるはずです。しかし、なぜか宇宙的な数字が表示されます。私の勘違いでなければ、それはMT5で可能な二重値の最大値です。

テスターで試してみましたが、昨日も今日も相場はありませんでした。

もしご希望があれば、ご教授ください。Expert Advisorとindicatorは投稿に添付しました。Expert Advisorは変更しました。

ファイル:
 
Sergey Voytsekhovsky:

こんにちは。はい、ハンドルネームができました。

私は少し前進しました(非常に少し!)。コメントレコードが表示されました

Print()レコードがある


2019.05.19 17:31:13.127 2018.01.02 00:00:00 ハンドル iCrossAD = 10

2019.05.19 17:31:13.580 2018.01.02 09:00:00 iCrossADインジケータの第2バッファからデータをコピーした

2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308

2019.05.19 17:31:13.580 2018.01.02 09:00:00 iCrossADインジケータの第3バッファからデータをコピーしました。

2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308

2019.05.19 17:31:13.580 2018.01.02 09:00:20 iCrossADインディケータの第2バッファからデータをコピーしました。

2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.79769313486262316e+308

2019.05.19 17:31:13.581 2018.01.02 09:00:20 iCrossADインディケータの第3バッファからデータをコピーしました。

2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308


データがコピーされるインジケータ内の2つのバッファには、インジケータの矢印が設定される値が格納されています。これらは矢印が設定された瞬間に書き込まれます。したがって、二重価格で埋められることはないはずです。しかし、なぜか私には宇宙的な数字があり、私の勘違いでなければ、それはMT5で可能な二重値の最大値です。

しかし、テスターで試したところ、昨日も今日も相場はなく、今日は日曜日である。

ご教授いただければ幸いです。Expert Advisorとindicatorは投稿に添付しました。Expert Advisorは変更しましたので、上に書きました。インジケーターもあなたのもので、変更はありません。

さて、ここではライブラリに関する質問について議論しているのであって、インジケータ・バッファの 空の値に関する些細な無知について議論しているのではありません。空の値 == dbl_max
 
Artyom Trishkin:
さて、ここでは、インジケータ・バッファの 空の値に関する些細な無知ではなく、ライブラリに関する疑問について議論する。empty_value == dbl_max

わかった、聞いたよ、ありがとう。空値については何となく知っていたつもりなので、質問を勉強してみます。

もしここが適切でないなら、あなたやあなたの同僚からそのようなつまらない質問に対する答えを得ることができるスレッドを紹介してもらえますか?

もしそのような場所がなければ、作る価値があるかもしれません。

お騒がせして申し訳ありませんが、ここでは活発な会話はありませんし、邪魔する人もいません。

それに、私はあなたのライブラリーを利用しようとしている。もちろん、原始的なものですが、できる限り、すみません。

 
Sergey Voytsekhovsky:

ロジャー、聞いたよ。空の値について何か知っていることがあると思ったんだ。

もしここが適切でなければ、あなたやあなたの同僚からそのような下らない質問に対する答えを得ることができる他のスレッドを紹介してもらえますか?

もしそのような場所がなければ、作る価値があるかもしれません。

お忙しいところ申し訳ありませんが、ここでは活発な議論もなく、邪魔する人もいませんし、著者以外の誰が最良のアドバイスをするのでしょうか?

それに、私はあなたのライブラリーを使おうとしている。もちろん原始的なものですが、できる範囲で、すみません。

ライブラリーに関係のない質問は、ここに書いてください:

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2016.11.09
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Artyom Trishkin:

図書館に関係のない質問は、こちらに投稿してください:

ありがとうございます。私が必要としていたものです。