MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1577

 
Mihail Matkovskij :

OnTradeTransaction , sunucudaki herhangi bir durdurma emri tetiklendiğinde tetiklenir.

Ancak işlev kayıtlı olmalıdır?
 
Eugen8519 :
Belki aracılığıyla?

DEAL_REASON_SL
DEAL_REASON_TP

Numara

rıhtımlarda çok güzel bir OnTradeTransaction örneği var

 
MakarFX :
Ancak işlev kayıtlı olmalıdır?

Bu amaçla ise   bir işlev ekleyin, o zaman uygun olacaktır. Neden?...

Ancak, sunucu bunu yapacağı ve OnTradeTransaction'a bir sinyal göndereceği için, içindeki durdurma geçişlerini izlemek gerekli değildir.

 
Mihail Matkovskij :

Bu amaçla ise   bir işlev ekleyin, o zaman uygun olacaktır. Neden?...

Ancak, sunucu bunu yapacağı ve OnTradeTransaction'a bir sinyal göndereceği için, içindeki durdurma geçişlerini izlemek gerekli değildir.

Misha, mql5'te güçlü değilim, daha yeni anlamaya başlıyorum,

ama, bence, önce şöyle bir şey kaydetmeniz gerekiyor

if( OnTradeTransaction (...)==....)  SendNotification ( "текст" );

yanlışım varsa düzeltirseniz sevinirim

 
MakarFX :

Misha, mql5'te güçlü değilim, sadece araştırmaya başlıyorum

ama, bence, önce şöyle bir şey kaydetmeniz gerekiyor

yanlışım varsa düzeltirseniz sevinirim

OnTradeTransaction böyle bir olay işleyicisidir. Bu nedenle, tüm işlem kodu içinde olmalıdır. Peki, ya da isterseniz işleme işlevini çağırın. Bağlantıdaki belgelerdeki açıklamaya bakın.
 
Mihail Matkovskij :
OnTradeTransaction böyle bir olay işleyicisidir. Bu nedenle, tüm işleme kodu içinde olmalıdır . Peki, ya da bir işleme işlevi, isterseniz. Bağlantıdaki belgelerdeki açıklamaya bakın.

Aynı şeyden mi bahsediyoruz?

if( OnTradeTransaction ( ... )==....)  SendNotification ( "текст" );
 
Ve öyle olsa bile? Mql4'teki gibi bulundu
 void AlertOrder()

{

   string txt;

   double OCP;

   int i=OrdersHistoryTotal()- 1 ;

   if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== true )

   {                                

      OCP=OrderClosePrice();

       if (OCP==OrderStopLoss()) txt= "SL" ;

       if (OCP==OrderTakeProfit()) txt= "TP" ;

      }

       SendNotification ( Symbol () + " hit " +txt+ "" );

 }
 
Eugen8519 :
Ve öyle olsa bile? mql4'teki gibi bulundu
OrdersHistoryTotal

mql5'te değil

 
MakarFX :

Aynı şeyden mi bahsediyoruz?

Numara. İşleyiciyi if durumunda arayacaksınız. Ama herhangi bir yerde aramanıza gerek yok. İşlem kodunu OnTradeTransaction'a yazmanız yeterlidir . Bir durdurma tetiklendiğinde OnTradeTransaction'a hangi parametrelerin aktarıldığını görün.

Olayların ne olduğunu ve olay işleyicisinin ne olduğunu bilmelisiniz, ancak MQL'deki olaylar nelerdir. O zaman her şeyi anlamaya başlayacaksın.

İşte Olay İşleme İşlevlerinin ne olduğuna dair bir bağlantı https://www.mql5.com/ru/docs/basis/function/events#ontradetransaction .

Karışıklığı önlemek için genellikle olay işleyicileri olarak adlandırılırlar. Örneğin, OnTradeTransaction'ı if olarak adlandırılan normal bir işlevle nasıl karıştırdınız?

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Функции обработки событий - Функции - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Eugen8519 :
Ve öyle olsa bile? mql4'teki gibi bulundu

Bunu dene (kontrol etmedim)

 datetime lastclouse; 
int OnInit ()
  {
   lastclouse= TimeCurrent ();
   .....
  }
void OnTick ()
  {
   if (LastClouseProfit()!= EMPTY_VALUE ) SendNotification (LastClouseProfit());
   .....   
  }  
double LastClouseProfit()
  {
   ulong ticket= 0 ;
   double profit= EMPTY_VALUE ;
   HistorySelect (lastclouse, TimeCurrent ());
   ticket= HistoryDealGetTicket ();
   profit= HistoryDealGetDouble (ticket, DEAL_PROFIT );
   if (profit!= EMPTY_VALUE ) lastclouse= TimeCurrent ();
   return (profit);
  }