MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1578

 
MakarFX:

Versuchen Sie es (I habe es nicht getestet)

ありがとうございます、後で確認します。

 
Eugen8519:



機能を正しく配置するために、ご協力をお願いします。

...

しかし、どこにどのように挿入するのか

ストップロスやテイクプロフィットに 到達したときにメッセージを送るには?


MakarFX:

同じことを言ってるのか?

OnTradeTransactionで SLの出口を追跡する例を見つけました。https://www.mql5.com/ru/code/21147。

Candle shadows v1
Candle shadows v1
  • www.mql5.com
Анализ размера свечи и тени свечи. В OnTradeTransaction отлавливаем открытие (DEAL_ENTRY_IN) и закрытие позиций (DEAL_ENTRY_OUT), а также закрытие по Stop loss (DEAL_REASON_SL).
 

同じEAを2種類の楽器で使用する

こんにちは!助けていただけませんか?

ドラッグしたチャート上で動作するEAがあります(Symbol()の 値はシンボルの名前として扱われます)。

しかし、このEAでは、設定された注文のチケットを格納するticket_exist変数も持っており、ticket_existが0でなければ、ここで注文が設定 されたと理解します。

質問:このようなEAを2つの異なる機器で開いた場合、一方の機器でticket_exist変数がゼロに等しくなければ、同じ名前の変数はもう一方の機器でもゼロに等しいままでしょうか。

SUです。

 
Mihail Nefedov:

同じEAを2種類の楽器で使用する

こんにちは!助けていただけませんか?

ドラッグしたチャート上で動作するEAがあります(Symbol()の 値はシンボルの名前として扱われます)。

しかし、このEAでは、設定された注文のチケットを格納するticket_exist変数も持っており、ticket_existが0でなければ、ここで注文が設定 されたと理解します。

質問:このようなEAを2つの異なる機器で開いた場合、一方の機器でticket_exist変数がゼロに等しくなければ、同じ名前の変数はもう一方の機器でもゼロに等しいままでしょうか。

SUです。

あるEAの変数値が、別のEAで利用できない。要は、シンボルかマジックのどちらか、あるいは両方が違うということです。

 

ティック単位で何時か教えてください。サーバータイムか UTCか?

どこかで読んだ記憶があるのですが、思い出せません...。

 
Alexey Viktorov:

あるEAの変数値が、別のEAで利用できない。要は、シンボルか魔法か、あるいはその両方が違っていればいいんです。

ありがとうございます 私が正しく理解していれば、異なるシンボルで動作するEA(2つの全く同じもの)の競合を得るために、それらの変数はグローバル(ターミナル全体)として設定されるべきであるか、例えば、注文はそのシーケンス番号または単にその存在の事実によってアクセスされるべきであるか?

 
MakarFX:

これを試してみてください(テストはしていません)

うまくいかず、コンパイルエラーになる。


この方法で試したところ、問題なくコンパイルできましたが、リンクを閉じた状態でのテストができません

明日からまた頑張るぞ。

  void OnTradeTransaction(const MqlTradeTransaction &trans,
                          const MqlTradeRequest &request,
                          const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_reason       =-1;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason=HistoryDealGetInteger(trans.deal,DEAL_REASON);
        }
      else
         return;

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_reason==DEAL_REASON_SL)
               SendNotification ("Закрыл  позицию > StopLoss");

            if(deal_reason==DEAL_REASON_TP)
               SendNotification ("Закрыл  позицию > TakeProfit");
           }
       }
  }
ファイル:
x4.PNG  11 kb
 
Eugen8519:

を実行すると、コンパイルエラーが発生します。


この方法で試したところ、問題なくコンパイルできましたが、リンクが閉じているとテストができません

明日には完成させます。

コードが 正しく入力されていません。

少し直したら動くようになった。

  datetime lastclouse; 
//+------------------------------------------------------------------+
int OnInit()
  {
   lastclouse=TimeCurrent();
   .....
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   if(LastClouseProfit()!=EMPTY_VALUE)
     {
      SendNotification (LastClouseProfit()); lastclouse=TimeCurrent();
     }
   .....   
  }
//+------------------------------------------------------------------+
double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit+=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }
//+------------------------------------------------------------------+
 
MakarFX:

コードが 正しく入力されていません。

少し修正したら、動くようになりました(確認しました)。

ここで、SLやTPによって取引がきっちり成立した事実をトレースする必要がある。また、OnTradeTransactionを 使用することで、取引終了後にすぐにデータを取得することができます。

double LastClouseProfit()
  {
   ulong ticket=0;
   double profit=EMPTY_VALUE;
   HistorySelect(lastclouse,TimeCurrent());
   uint total=HistoryDealsTotal(); 
   for(uint i=0;i<total;i++) 
     { 
      if((ticket=HistoryDealGetTicket(i))>0) 
        { 
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT); 
        }
     } 
   return(profit);
  }

TimeCurrentで クローズした取引が複数ある場合、どのような結果を返すべきでしょうか?また、利益があるからといって、SLやTPで取引が終了したわけではありません。これは先ほども言ったように、トラッキングが必要です。そこで、OnTradeTransactionを 使用するのが最も簡単な解決 策です。

 
Mihail Matkovskij:

ここで、取引がSLまたはTPで正確に決済されたことを追跡する必要もあります。

取引成立のお知らせと理解していたのですが、もしかしたら勘違いしていたかもしれません...。

ミハイル・マトコフスキージ

TimeCurrentで 複数の取引が決済された場合、どのような結果が返ってくるのでしょうか?

わからない、確認が必要