初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1404

 
既存のMT4取引ロボットがあり、取引口座へのリンクでコードを追加していますが、まだ失敗しています。エラーをスローします。私の電報@Starinkov は非常に感謝しています))) 。
 

忠実に翻訳してほしいが、当然そうはいかないだろう...。

このような理由から、グローバルスレッドは必要ないのです...。

そうでなければ、リージョナル・フォーラムは存在しないのですから......。

奇妙な動きだ...。

:(

 
こんにちは!私は、最適化のスピードアップと、M1、M2などの小さなTFでのストラテジーパフォーマンスを最適化できるように、24コアのコンピュータを作りました。起動すると、時々プロセスがフリーズして長い時間ハングアップするのがわかります。それに関する写真を3枚添付します。私の古いコンピュータ(8コア)で、このようなことは何も起こりません。しかも、この失速の結果、強力なコンピュータを使うメリットはない。現在、8コアで24倍より速い結果が得られることが分かっています。 そして、私は10倍速を得たいと考えていました。もしかしたら、どこかで調整する必要があるのでしょうか?どなたかご存知の方がいらっしゃいましたら、アドバイスをお願いします。
 

こんにちは。

どんなEAでもインクルードできるユニバーサルインクルードファイルを作りたいのですが。そしてそれは、追加のコードなしに、たった一つのインクルージョンに限定されるべきです。

問題は、このファイルでは入力ポイントとしてOnTimer()を使用していることです。

私のインクルードファイルが接続するEAもOnTimer()を使用している場合はどうでしょうか?何か解決策はあるのでしょうか?

 

こんにちは。モエックス証券で取引しています。ブローカー・オットクライティ複数の商品のオープンポジションが ある場合、ロボットはそれらを部分的に決済するリクエストを送信する際に混同してしまいます(例えば、Sberbankの株価をMagnitの株価に置き換えてリクエストを送信することができます)。つまり、リクエストのインスツルメントがMagnitに指定されているが、価格はSberbankに指定されている)または単にリクエストを送信しないことです。ロングポジションのクローズアルゴリズムのコード(商品のPrice_Close_1_Buyの価格に達したときに実行されます)。

void Price_Close_1_Buy()
  {

   MqlTradeRequest arequest;
   MqlTradeResult aresult;
   ZeroMemory(arequest);
   ZeroMemory(aresult);

   for(int i=PositionsTotal()-1; i>=0; i--)
      {
       if(Symbol()==PositionGetSymbol(i))
      {
       arequest.action   = TRADE_ACTION_DEAL;
       arequest.position = PositionGetTicket(i);
       arequest.symbol   = Symbol();
       arequest.volume   = NormalizeDouble((Lots_Close_1/100*Lots_current()),0);
       arequest.price    = aposition.PriceCurrent();
       arequest.type_filling = ORDER_FILLING_FOK;
       arequest.type     = ORDER_TYPE_SELL;
       Price_Close_1_Buy_Request_Send = true;
      }
       OrderSend(arequest,aresult);
       Print("=================================================================================================== ");
       Print(asymbol.Name());
       Print("Price_Close_1_Buy_request() ",arequest.price);
       Print("Lots_Close_1_Buy_request() ",arequest.volume);
       Print("Result ", aresult.comment);
       Print("Retcode ",aresult.retcode);
      }
  }
 
leonerd #:

こんにちは。

どんなEAでもインクルードできるユニバーサルインクルードファイルを作りたいのですが。そして、追加コードなしで1つのインクルージョンに限定する必要があります。

問題は、このファイルでは入力ポイントとしてOnTimer()を使用していることです。

私のインクルードファイルが接続するEAもOnTimer()を使用している場合はどうでしょうか?解決策はあるのでしょうか?

絶対にやめてください。

ひとことアドバイス考えを改めるつもりはない。

 
Manter84 オープンポジションが ある場合、ロボットはそれらを部分的に決済するリクエストを送信する際に混同してしまいます(例えば、Sberbankの株価をMagnitの株価に置き換えてリクエストを送信することができます)。つまり、リクエストのインスツルメントがMagnitに指定されているが、価格はSberbankに指定されている)または単にリクエストを送信しないことです。ロングポジションのクローズアルゴリズムのコード(商品価格がPrice_Close_1_Buyに達したときに実行されます)。
価格の問題について - 掘
aposition.PriceCurrent()
 
Koldun Zloy #:

絶対にやめてください。

ひとことアドバイスあなたの気持ちを変えるつもりはありません。

以上が、プロジェクトの要件である。

 

デフォルトのOrderSend()をオーバーライドするには?

#define OrderSend(MqlTradeRequest,MqlTradeResult)  MyOrderSend(MqlTradeRequest,MqlTradeResult)

上部に一本線を 入れました。

MyOrderSend()の中で、いくつかの計算を行い、再度OrderSend()を呼び出します。ネイティブのOrderSend()を呼び出したいのですが、代わりに再帰が発生してMyOrderSend()が再度呼び出されてしまいます。

そして、この呼び出しも役に立ちません ::OrderSend()
 
leonerd 一行追加しました

MyOrderSend()の中で、いくつかの計算を行い、再度OrderSend()を呼び出します。ネイティブのOrderSend()関数を呼び出したいのですが、代わりに再帰が発生してMyOrderSend()が再び呼び出されてしまいます。

これでは全く効果がありません。OrderSend(...) が発生するたびに MyOrderSend(...) に置き換えられるように、#define はプログラムコード内で最初の(呼び出し)部分を2番目の部分に置き換えます。

理由: