Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri

 
Bu konu , mql5 diliyle belgelenmemiş çalışma yöntemlerini, belirli görevleri çözme örneklerini tartışacaktır. Bu başlığın içerik olarak tartışmadan çok SSS'ye daha yakın olmasını istiyorum. Tüm deneyimli programcıları buldukları çözümleri ve programlama tekniklerini paylaşmaya davet ediyorum. Yardımda açıklanmayan olasılıkların kapsamı özellikle memnuniyetle karşılanmaktadır.
 
fxsaber :

bir piyasa emriyle bir pozisyon başarıyla açıldığında , sonuç her sıfır olduğunda Result.deal?

SD'den
Ortaya çıkan anlaşmanın biletin tamamlanması garanti edilmez. Doldurma veya doldurmama, aracın yürütme moduna ve belirli bir sunucunun ayarlarına bağlıdır.
Kim sıfır olmayan bir Result.deal koydu - harekete geçin.
 
OrderSend çalıştırıldıktan sonra ilgili emir, pozisyon veya anlaşmaya erişim her zaman başarılı olmaz. Geçmiş veya güncel ticaret bilgileri doğru olana kadar birkaç on milisaniye beklemeniz gereken durumlar vardır.
 
fxsaber :
OrderSend'i çalıştırdıktan sonra, ilgili emir, pozisyon veya anlaşmaya erişmek her zaman başarılı olmaz. Geçmiş veya güncel ticaret bilgileri doğru olana kadar birkaç on milisaniye beklemeniz gereken durumlar vardır.
aynısı MT4'te bulunur, belirli sunucuya bağlıdır
 
İşlemi oluşturan emrin fiyatını bilmek her zaman mümkün değildir.
 
Kapalı bir pozisyonun SL/TP seviyelerini bulmak her zaman mümkün değildir.

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

Kapalı bir pozisyonun TakeProfit (ve StopLoss)

fxsaber , 2016.07.17 20:19

TakeProfit hedge'in tanıtılmasından önce, açık pozisyonlar borsada limit emirleri şeklinde değil, MT5 ticaret sunucusunda saklanıyordu. Aynı zamanda kabul anında borsaya belirtilen fiyattan limit emir olarak değil, belirtilen fiyattan piyasa emri olarak gönderiliyordu.

Bu özellik, TP tetiklendiğinde test cihazında çok net bir şekilde görülebilir: ilgili piyasa emri (ve limit değil) görünür. Takeprofit, mevcut bir takas tipi emir olmadığından (sadece piyasalar ve limitler vardır), bu durum "piyasa" emrine uygundur.

Hedge'nin gelişiyle durum değişmedi - kar alma sanal kaldı. Aynı zamanda, MT4'te durum farklıdır: MT4 köprülerinin varlığı uzun yıllar boyunca, MT4-takeprofit'in limit emirleri olduğu standart haline gelmiştir.

Bu sanallık nedeniyle, MT5'in bazı özellikleri bir iz gibi takip ediyor. Sadece MT5'te kar alma ayarlamamak daha iyi olmakla kalmaz, eğer bir limit analogu istiyorsanız, o zaman bir pozisyonu kapattıktan sonra MQL5 kullanarak kar alma ve stoploss değerlerini bulamayacaksınız .

Bunlar asılsız suçlamalar değil, saatlerce her şeyin nasıl çalıştığını anlamaya çalışmanın (HistorySelectByPosition vb. yardımlar olmadan) sonucudur. Ve yanılıyorsam seve seve özür dilemeye hazırım. Asılsız olmamak için, bir pozisyon açan, ardından SL ve TP seviyelerini belirleyen RoboForexEU-MetaTrader 5 sunucusunda testçi için bir danışman (anlaşılması daha kolay) getiriyorum.

 void OnTick ()
{
   static bool Flag = true ;

   if (Flag)
  {
     // Открываем SELL-позицию
     MqlTradeRequest Request = { 0 };

    Request.action = TRADE_ACTION_DEAL ;

    Request.symbol = Symbol ();
    Request.volume = 1 ;
    Request.price = SymbolInfoDouble ( Symbol (), SYMBOL_BID );

    Request.type = ORDER_TYPE_SELL ;

     MqlTradeResult Result;

     if ( OrderSend (Request, Result))
    {
       // Устанавливаем SL и TP
      Request.position = Result.deal;

      Request.action = TRADE_ACTION_SLTP ;

      Request.tp = Result.ask - 10 * _Point ;
      Request.sl = Result.ask + 10 * _Point ;

       if ( OrderSend (Request, Result))
         Print ( "Сделка в тестере закроется либо по SL, TP, либо по окончании бэктеста" )    ;

      Flag = false ;
    }
  }
}

Bu Expert Advisor'da (OnDeinit'te) tek bir kapalı pozisyonun SL ve TP'sini belirlemek imkansızdır. Bu kadar mı amaçlanmış?


Ayrıca alıntıdan, MT5'teki bir pozisyonun TP'sinin her zaman bir piyasa emri olduğu sonucu çıkar. Limit analoguna bahis yapmayın - yukarıya bakın.
 

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

Test cihazında test için Uykuya alternatif

Slava , 2017.02.22 11:16

Evet, ancak yalnızca test edilen Uzman Danışman için. Uzman tarafından kullanılan göstergeler için - hayır

 

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

Hatalar, hatalar, sorular

Slava , 2017.02.14 13:46

Ne için? Tek bir işlem yeterlidir.

Sembol, Piyasa İzleme'de seçildiği ve sembolün geçmişi Uzman Danışman tarafından tutulduğu sürece, senkronize durumda tutulur. Bir uzman tarafından tutmak, örneğin bir çubuğu kopyalayarak bu geçmişe en az 2 dakikada bir erişmek anlamına gelir. Geçmiş senkronize edilirse, bir çubuğu kopyalamak için zaman harcanmaz - sadece birkaç işlemci döngüsü. Veya az önce dedikleri gibi, çubuk sayısını isteyin, ayrıca birkaç döngü

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

Hatalar, hatalar, sorular

Alexey Kozitsyn , 2017.02.14 13:47

Göstergeler 2 dakikalık bir aralık içeriyor mu?

Evet ve senkronizasyon gerçeği kontrol edilerek senkronizasyon da yapılacak mı?

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

Hatalar, hatalar, sorular

Slava , 2017.02.14 13:50

Aynısı göstergeler için de geçerlidir. 1 dakikalık bir zamanlayıcı oluşturun ve ilgilendiğiniz tüm zaman serileri için çubuk sayısını sorun.

Senkronizasyon, bir senkronizasyon doğruluk kontrolü tarafından yapılmaz.

 
fxsaber :
OrderSend'i çalıştırdıktan sonra, ilgili emir, pozisyon veya anlaşmaya erişmek her zaman başarılı olmaz. Geçmiş veya güncel ticaret bilgileri doğru olana kadar birkaç on milisaniye beklemeniz gereken durumlar vardır.

Birkaç milisaniye beklemeye gerek yok.

Mesaj OnTradeTransaction'a gönderilecek

kodu gör

Dosyalar:
 
basit tüccar :

Birkaç milisaniye beklemeye gerek yok.

Mesaj OnTradeTransaction'a gönderilecek

kodu gör

Bu scriptlerde yok . Bir komut dosyası yerine, bir grup Expert Advisor + ExpertRemove kullanmak aptalca.

Ayrıca, 180 saniye boyunca sunucudan yanıt gelmezse OrderSend zaman aşımına uğrar. Bu, sonsuza kadar beklenen biletlerin OnTradeTransaction'da birikebileceğini gösteriyor. Ve komut dosyanızda olduğu gibi OnTradeTransaction için yalnızca bir order_ticket seçeneği kötü. Asenkron gönderimden sonra sipariş listelerinden çalışma başlar. Bu yüzden paketlerle çalışmak eşzamansızdır. Ve paketlerle çalışma yoksa, asenkronize asla ihtiyaç yoktur.

 
MT4-OrderClosePrice-chip , MT5'te de çalışır - PositionGetDouble(POSITION_PRICE_CURRENT) .
Neden: