Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği) - sayfa 20

 
Andrey Khatimlianskii :

Dilinle öğütmek torba yuvarlamak değildir. Alıp öğreteceklerdi. Ben lütfen.

Bir sorun var ve kendini sadece bu komisyoncuda göstermiyor.
Sorun şu ki, belirli bir emrin yürütülmesini beklemeniz gerekmiyor (bu farklı bir düzlemden), ancak emirlerin uygulandığı anda, tüm listelerden (açık, kapalı, anlaşmalar, pozisyonlar) geçici olarak kayboluyorlar. .

Elbette başka bir koltuk değneği ile destekleyebilirsiniz. Ama ben insani bir çözüm istiyorum. Hangi fxsaber'ın halka açık olarak çalıştığı, geçen iyi dileklerin havlamalarını dinleyerek.

Şahsen, umarım belgelerin bu tür sözlerini incelemeniz yeterlidir.

Uzman Danışman tarafından OnTradeTransaction() işleyicisi kullanılarak ticari işlemlerin işlenmesi sırasında, terminal yeni gelen ticari işlemleri işlemeye devam eder. Bu nedenle, ticaret hesabının durumu, OnTradeTransaction() işlemi sırasında zaten değişebilir. Örneğin, MQL5 programı yeni bir emir ekleme olayını işlerken, bu emir yürütülebilir, açık emirler listesinden çıkarılabilir ve geçmişe taşınabilir. Gelecekte, program tüm bu olaylardan haberdar edilecektir.
ve bu yalnızca OnTradeTransaction() olay işleyicisi için değil, OrderSend() gönderildikten sonra kodun herhangi bir bölümü için de geçerlidir. İşlemin tamamlanmasını bekleyin. Başka seçenek yok ve olması da olası değil... Sadece bir düşünün, mql4'te neden her şey bu kadar basit? Evet, çünkü bu beklentiler gözünüzden uzağa atılıyor. Ve MQL5'te nedense tüm kontrolleri ve beklentileri koltuk değneği olarak görüyorsunuz. Niye ya???
 
Alexey Viktorov :

Şahsen, belgelerin bu tür sözlerini incelemeniz için yeterli olduğunu umuyorum.

ve bu yalnızca OnTradeTransaction() olay işleyicisi için değil, OrderSend() gönderildikten sonra kodun herhangi bir bölümü için de geçerlidir. Anlaşmanın tamamlanmasını bekleyin. Başka seçenek yok ve olması da olası değil... Sadece bir düşünün, mql4'te neden her şey bu kadar basit? Evet, çünkü bu beklentiler gözünüzden uzağa atılıyor. Ve MQL5'te nedense tüm kontrolleri ve beklentileri koltuk değneği olarak görüyorsunuz. Niye ya???

Alex, konu dışısın. Üzgünüm, her şeyi tekrar açıklamak için zamanım veya eğilimim yok.

 

şöyle denedi:

 void OnTrade ()
{
   HistorySelect ( TimeCurrent (), 0 );
   if ( PositionsTotal () >= 10 ) return ;
   MqlTradeResult result;
   BuyRequest.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
   OrderSend (BuyRequest, result);
}

Kodumu 5 kez çalıştırdım, tam olarak 10 pozisyon açılana kadar

 
Igor Makanu :

şöyle denedi:

Kodumu 5 kez çalıştırdım, tam olarak 10 pozisyon açılana kadar

HistorySelect girişini ayarlarken bir hata gibi görünüyor.

 
fxsaber :

HistorySelect girişini ayarlarken bir hata gibi görünüyor.

sunucuya ulaşma ve senkronize etme fikri

komut dosyası olarak yeniden yazılmıştır:

 //+------------------------------------------------------------------+
void OnStart ()
{
   MqlTradeRequest BuyRequest = { 0 };
   MqlTradeResult result = { 0 };
   BuyRequest.action = TRADE_ACTION_DEAL ;
   BuyRequest.type = ORDER_TYPE_BUY ;
   BuyRequest.symbol = _Symbol ;
   BuyRequest.volume = 0.1 ;
   BuyRequest.type_filling = GetFilling();
   datetime t_start = TimeCurrent ();
   while ( PositionsTotal () < 10 )
   {
      BuyRequest.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
       if (! HistorySelect ( TimeCurrent (), t_start) || ! OrderSend (BuyRequest, result)) continue ;
       if ( PositionsTotal () >= 10 ) return ;
   }
}
//+------------------------------------------------------------------+
ENUM_ORDER_TYPE_FILLING GetFilling( const uint Type = ORDER_FILLING_FOK )
{
   const ENUM_SYMBOL_TRADE_EXECUTION ExeMode = ( ENUM_SYMBOL_TRADE_EXECUTION ):: SymbolInfoInteger ( _Symbol , SYMBOL_TRADE_EXEMODE );
   const int FillingMode = ( int ):: SymbolInfoInteger ( _Symbol , SYMBOL_FILLING_MODE );

   return ((FillingMode == 0 || (Type >= ORDER_FILLING_RETURN ) || ((FillingMode & (Type + 1 )) != Type + 1 )) ?
          (((ExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE ) || (ExeMode == SYMBOL_TRADE_EXECUTION_INSTANT )) ?
           ORDER_FILLING_RETURN : ((FillingMode == SYMBOL_FILLING_IOC ) ? ORDER_FILLING_IOC : ORDER_FILLING_FOK )) :
          ( ENUM_ORDER_TYPE_FILLING )Type);
}
//+------------------------------------------------------------------+

birkaç kez başlatıldı, ayrıca 10 pozisyon açar , komut dosyasının mevcut başlangıç zamanını ekledi

 
Igor Makanu :

sunucuya ulaşma ve senkronize etme fikri

komut dosyası olarak yeniden yazılmıştır:

birkaç kez başlatıldı, ayrıca 10 pozisyon açar , komut dosyasının mevcut başlangıç zamanını ekledi

Böyle bir değişiklik neyi gösterecek?

 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

       if (! _B( HistorySelect ( TimeCurrent (), t_start) , 1 ) || ! OrderSend (BuyRequest, result)) continue ;
 
fxsaber :

Böyle bir değişiklik neyi gösterecek?


2021.05.09 21:35:06.210 tst (ETHUSD,H1) Benchmark.mqh: TimeAvg[GetMicrosecondsCount()] = 0 mcs.

2021.05.09 21:35:06.211 tst (ETHUSD,H1) Benchmark.mqh Açık.

2021.05.09 21:35:06.211 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 20 mcs.

2021.05.09 21:35:06.308 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 6 mcs.

2021.05.09 21:35:06.404 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 10 mcs.

2021.05.09 21:35:06.501 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 13 mcs.

2021.05.09 21:35:06.597 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 10 mcs.

2021.05.09 21:35:06.694 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 3 mcs.

2021.05.09 21:35:06.792 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 4 mcs.

2021.05.09 21:35:06.888 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 3 mcs.

2021.05.09 21:35:06.989 tst (ETHUSD,H1) Uyarı: Bench_Stack = 0, 1 <= OnStart'ta Zaman[tst.mq5 16: HistorySelect(TimeCurrent(),t_start)] = 4 mcs.

şimdiye kadar hala 10 pozisyon var, henüz ikiye katlama olmadı
 
Igor Makanu :

hala 10 pozisyon var, henüz ikiye katlama olmadı

HistorySelect'in yürütme zamanından, Trade Server'dan herhangi bir şey talep etmediği açıktır.


Birkaç versiyon.

  1. Şanslısın.
  2. Bu dal, yeni Terminal yapısında sessiz bir değişikliğe neden oldu. Eskilerde bir birikim olup olmadığını teyit etmek kolaydır.
  3. From >= To olduğunda HistorySelect'in standart olmayan davranışı.
  4. Ticaret sunucusu. İsim?


Burada çiftlerden kurtulmak için aynı yolu deneyin.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Sonsuza kadar harika ve korkunç MT4 (veya bir geçiş stratejisinin nasıl doğru bir şekilde geliştirileceği)

fxsaber , 2021.05.05 02:04

 // Демонстрация открытия дубля позиции в MT5.

#include <Trade\Trade.mqh>

void OnStart ()
{
  CTrade Trade;
  
   while (! IsStopped () && ( PositionsTotal () <= 1 )) // Закончим, когда появится более одной позиции.
     if ( PositionsTotal () == 1 )
      Trade.PositionClose( PositionGetTicket ( 0 )); // Если есть позиция - закрываем.
     else if (! OrdersTotal ())
      Trade.Buy( 0.01 ); // Если нет позиции и ордера - открываем позицию.
}

Bu kodu boş bir demo hesabında çalıştırın ve birkaç saniye içinde iki pozisyonun açıldığını görün.

 

işte tesadüfen gittim, okuyun - bu bir tür utanç!

kimseye güvenilmez!
 
fxsaber :

HistorySelect'in yürütme zamanından, Trade Server'dan herhangi bir şey talep etmediği açıktır.


Birkaç versiyon.

  1. Şanslısın.
  2. Bu dal, yeni Terminal yapısında sessiz bir değişikliğe neden oldu. Eskilerde bir birikim olup olmadığını teyit etmek kolaydır.
  3. From >= To olduğunda HistorySelect'in standart olmayan davranışı.
  4. Ticaret sunucusu. İsim?


Burada çiftlerden kurtulmak için aynı yolu deneyin.

1. ne yazık ki, bizim işimizde onsuz hayatta kalamazsınız))

2. Birkaç gün önce hangi yapının (beta değil) güncel olduğunu öğrendim, sessizlik, güncel olmadığına karar verdim, bir dizüstü bilgisayarda ve bir PC'de derlemelerden neyin alakalı olduğunu anlayacaksınız - I birkaç aydır terminallerle uğraşmıyorum, takip etmiyorum. Şimdi PC yapı 2903'te

3. Geçiyorum, bu ziyafetten siz sorumlusunuz, geliştiriciler sessiz, varsayımlarım ... gökyüzüne işaret ediyor, sorunun ağ gecikmelerinde ve birkaç sokette olduğunu düşünüyorum? terminal, senkronizasyon yok, bir fiyat soketi, başka bir OrderSend, başka nerede OnTrade() ..... yani paketler nereden ve nereden uçuyor

4. şimdi roboforex + 100 Mbit optik (ETTH), daha önce dizüstü bilgisayarda kötü mobil internet ve fhopen vardı


Denedim - senaryo 2 dakika harmanlandı, her zaman bir pozisyon, çiftler yoktu, senaryoyu ellerimle kaldırdım