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

 
Vadim Novikov :

Kayıtsız olmayan herkese iyi günler!!!


Ben ileri düzey bir kullanıcıyım. Ama çok sık yazmıyorum. Bu yüzden. Bazı yeniliklere ayak uyduramıyorum. Ve bazen bazı şeyleri unutuyorum.


Lütfen bana bir konuda yardım edin. Bir anı hatırlayamıyorum.


Durum şu. Burada harici değişkenleri ayarladım. Bu tür birçok değişken ayarlayın. 20 değişken. Bu programı tabloya eklediğinizde programın giriş menüsünde görüntülenirler.


Soru. Nasıl hatırlamam. Bu tür değişkenlerin blokları yorumlarla nasıl ayrılır? Öyleydi. giriş menüsünde. Örneğin:


Bu, MA değişkenlerini değiştirmek için bir bloktur (yorum)

MA dönemi

MA ayar yöntemi

MA fiyatı

Bu, MACD değişkenlerini değiştirmek için bir bloktur (yorum)

................................

......................

......................

Bu, BB değişkenlerini değiştirmek için bir bloktur (yorum)

................................

................................................

......................


Görünüşe göre daha önce bu tür yorumları yorum işleviyle koda ekledim. Yani // veya /* */ yazdı. Ama şimdi bir şey eksik.

   extern string      a1             = "Это  блок  по  изменению   переменных   MA (комментарий)" ;
   ..............
   ..............
   ..............
   extern string      a2             = "Это  блок  по  изменению  переменных   MACD (комментарий)" ;

Bunun gibi bir şey

 
OrderStopLoss() iki ondalık basamak verir.
Üç karakter göstermeye zorlamak mümkün mü?
 
Alekseu Fedotov :

Bunun gibi bir şey

Teşekkür ederim. Hatırladı!!!

 
Igor Golieniev :

Şu şekilde deneyin:

 Print ( "SL: " , DoubleToString ( OrderStopLoss (), Digits ()));

Bu, teklifin tüm önemli basamaklarını göstermek içindir. Başka sayıda karaktere ihtiyacınız varsa, Digits() öğesini belirli bir sayı ile değiştirin.

 
İyi akşamlar, söyle lütfen. OnInit'te işlev iki yatay çizgi oluşturur, OnTick'te iki işlev vardır, biri Bid > ilk satırsa, ikincisi Bid < ikinci satırsa bir push ve posta bildirimi gönderir. Teklif=satır, boşluğu dışlamak için yapılmadı. Doğal olarak, koşul karşılanırsa, bildirimin her onay işaretiyle geldiği gerçeğiyle hemen karşılaştım, ki bu kötü. Bu sorun nasıl çözülür? Standart bir uyarının ayarlarında bir zaman aşımı veya bildirim sayısını belirleyebilirsiniz, ancak bunu bir Expert Advisor'da nasıl yapabilirsiniz?
 
Ihor Herasko :

Şu şekilde deneyin:

Bu, teklifin tüm önemli basamaklarını göstermek içindir. Başka sayıda karaktere ihtiyacınız varsa, Digits() öğesini belirli bir sayı ile değiştirin.

Artık Print'te 15.155 doğru yazdırılıyor, ancak - OrderModify işlevi için geçersiz stoploss

Bu sorun yalnızca OrderModify'daki Silver ile ilgilidir.

 void Trailing()
  {
   if ( Digits == 3 || Digits == 5 )
     {
      TrailingStep *= 10 ;
      TrailingOpen *= 10 ;
      TrailingStop *= 10 ;
     }
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic)
           {
             if ( OrderType ()== OP_BUY )
              {
               if ( Bid > OrderOpenPrice ()+TrailingOpen* Point )
                 {
                   if ( OrderStopLoss ()< Bid -(TrailingStop+TrailingStep)* Point )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid - Point *TrailingStop, Digits ), 0 , 0 ))
                         Print ( "Oshibka =" , DoubleToString ( OrderStopLoss (), Digits ()));
                    }
                 }
              }
             if ( OrderType ()== OP_SELL )
              {
               if ( Ask < OrderOpenPrice ()-TrailingOpen* Point )
                 {
                   if ( OrderStopLoss ()> Ask +(TrailingStop+TrailingStep)* Point )
                    {
                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask +TrailingStop* Point , Digits ), 0 , 0 ))
                         Print ( "Oshibka" , DoubleToString ( OrderStopLoss (), Digits ()));
                    }
                 }
              }
           }
        }
     }
  }
 
Igor Golieniev :

Artık Print'te 15.155 doğru yazdırılıyor, ancak - OrderModify işlevi için geçersiz stoploss

Bu sorun yalnızca OrderModify'daki Silver ile ilgilidir.

Yukarıdaki kodda iki hata var:

  1. İzin verilen minimum durak boyutunun kontrol edilmemesi (buna Durma Seviyesi denir).
  2. Gerçek sayıların yanlış karşılaştırması.

İlk sorunu çözmek için mevcut Durdurma Seviyesini almanız gerekir:

 double fStopLevel = SymbolInfoInteger ( Symbol (), SYMBOL_TRADE_STOPS_LEVEL ) * Point ();

fStopLevel sıfıra eşit çıkarsa ve hesap türü ECN değilse, fStopLevel üç formaya eşit olmaya zorlanmalıdır.

Stopları (hem Zarar Durdur hem de Kâr Al) ayarlamadan önce, yeni seviyenin emir kapanış fiyatından Durdurma Seviyesi veya daha fazlası ile ayrıldığını kontrol edin. Bir Alış emrinin durmasını kontrol etmek için bu şu şekilde yapılır:

 if ( Bid - fNewSL - fStopLevel < - Point () / 10 )
{
   // Такой стоп ставить нельзя. Ближайший возможный уровень: Bid - fStopLevel
}

Bir Satış emri durdurma için:

 if (fNewSL - Ask - fStopLevel < - Point () / 10 )
{
   // Stop Loss на цене fNewSL ставить нельзя. Ближайший возможный уровень: Ask + fStopLevel
}


İkinci sorunun çözümü : Gerçek sayıların eşitliği her zaman ve her yerde sağlanamayacağından, gerçek değerleri biraz doğrulukla karşılaştırın. Yukarıda durma seviyesinin doğruluğunu kontrol etmek için kodlarda bir karşılaştırma örneği verdim.

 
Ihor Herasko :

Yukarıdaki kodda iki hata var:

  1. İzin verilen minimum durak boyutunun kontrol edilmemesi (buna Durma Seviyesi denir).
  2. Gerçek sayıların yanlış karşılaştırması.

İlk sorunu çözmek için mevcut Durdurma Seviyesini almanız gerekir:

fStopLevel sıfıra eşit çıkarsa ve hesap türü ECN değilse, fStopLevel üç formaya eşit olmaya zorlanmalıdır.

Stopları (hem Zarar Durdur hem de Kâr Al) ayarlamadan önce, yeni seviyenin emir kapanış fiyatından Durdurma Seviyesi veya daha fazlası ile ayrıldığını kontrol edin. Bir Alış emrinin durmasını kontrol etmek için bu şu şekilde yapılır:

Bir Satış emri durdurma için:


İkinci sorunun çözümü : Gerçek sayıların eşitliği her zaman ve her yerde sağlanamayacağından, gerçek değerleri biraz doğrulukla karşılaştırın. Yukarıda durma seviyesinin doğruluğunu kontrol etmek için kodlarda bir karşılaştırma örneği verdim.

Teşekkür ederim.

Ancak konu kapanmış değil. OrderModify, bir sipariş açıldığında hemen çalışmaya başlar. Hata nerede? (Tekrar ediyorum - tüm (tüm) para birimlerinde / vadeli işlemlerde çalışır, Silver'da - hayır)

 
Igor Golieniev :

Teşekkür ederim.

Ancak konu kapanmış değil. OrderModify, bir sipariş açıldığında hemen çalışmaya başlar. Hata nerede? (Tekrar ediyorum - tüm (tüm) para birimlerinde / vadeli işlemlerde çalışır, Silver'da - hayır)

1. Direktif

 #property strict

kullanır mısın?

2. Al ve Sat ile mi yoksa sadece Sat ile mi oluyor?

3. Stop Loss bir pozisyon açılırken konur mu yoksa mümkünse yerleştirmek ve çekmek için takip edilmeli mi?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Igor Golieniev :

Teşekkür ederim.

Ancak konu kapanmış değil. OrderModify, bir sipariş açıldığında hemen çalışmaya başlar. Hata nerede? (Tekrar ediyorum - tüm (tüm) para birimlerinde / vadeli işlemlerde çalışır, Silver'da - hayır)

Bir piyasa emrinin açılışını ve değişikliklerini görebileceğiniz ve hangi TrailingStop ve TrailingStep değerlerinin kullanıldığını belirtebileceğiniz günlükten (çevrimiçiyse, ardından Uzmanlar sekmesi) bir alıntı gösterin.

Neden: