Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 404

 

Emirleri açma ve değiştirme işlevleri için bir wrapper yazmaya başladım (bu operatörlerden değer döndürmekle sorunlarımı çözeceğini düşündüm), ama aynı sorun var.

Sorunun ne olduğunu açıklar mısın? (Ne yazarsam yazayım OrderSend, OrderSelex ve ModifyOrder'dan değerleri döndürmede her zaman sorun oluyor)

sarıcı kodu.

int başlangıç()

{

if (sinyal == 1)

{

OrderSendX(Symbol(),OP_BUY,0.1,Ask,0,500,500,"123",123,0,Kırmızı);

}

dönüş(0);

}

//-------------------------------------------

int OrderSendX (string sembolü,int cmd,çift hacim,çift fiyat,int kayma,çift stoploss,çift kar al,dize yorumu,

int magic,datetime sona erme,color arrow_color)

{

int err=GetLastError();

hata = 0;

bool exit_loop = yanlış;

int bilet = -1;

int Yeniden Dene = 10;

int cnt = 0;

if(cmd == OP_BUY || cmd == OP_SELL) // açılış için sipariş tipini kontrol edin

{

while(!exit_loop)

{

bilet = OrderSend(sembol,cmd,hacim,fiyat,slippage,stoploss,takeprofit,yorum,sihir,sona erme,ok_renk);

hata = GetLastError();

geçiş(hata)

{

durum ERR_NO_ERROR:

çıkış_döngüsü = doğru;

kırmak;

durum ERR_SERVER_BUSY:

durum ERR_NO_CONNECTION:

durum ERR_INVALID_PRICE:

durum ERR_BROKER_BUSY:

ERR_TRADE_CONTEXT_BUSY vakası:

cnt++;

kırmak;

ERR_PRICE_CHANGED vakası:

durum ERR_OFF_QUOTES:

durum ERR_REQUOTE:

Yeniler();

devam etmek;

varsayılan:

çıkış_döngüsü = doğru;

kırmak;

}

if(cnt>tekrar dene)

çıkış_döngüsü = doğru;

if(!exit_loop)

{

uyku(1000);

Yeniler();

}

başka

{

if(hata !=ERR_NO_ERROR)

{

Print("Hata : " + hata);

}

}

if(err ==ERR_NO_ERROR)

{

OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES);

bilet iadesi);

}

Print("Sıra açılırken hata oluştu" + cnt + "denemeler");

dönüş(-1);

}

}

}

 
Leanid Aladzyeu :

Emirleri açma ve değiştirme işlevleri için bir wrapper yazmaya başladım (bu operatörlerden değer döndürmekle sorunlarımı çözeceğini düşündüm), ama aynı sorun var.

Sorunun ne olduğunu açıklar mısın? (Ne yazarsam yazayım OrderSend, OrderSelex ve ModifyOrder'dan değerleri döndürmede her zaman sorun oluyor)

https://docs.mql4.com/ru/trading/ordermodify

 bool res=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Bid- Point *TrailingStop, Digits ),OrderTakeProfit(), 0 ,Blue);
             if (!res)
               Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
             else
               Print ( "Цена Stop Loss ордера успешно модифицирована." );

OrderModify() evet , hayır döndürür

OrderModify - Документация на MQL4
  • docs.mql4.com
OrderModify - Документация на MQL4
 

Kimse açıklayamaz.

Yardımı bana 100 kez kopyalayarak değil, bir örnekle farklı bir şekilde deneyelim.

Nasıl doğru olmalı? Düzeltmeleri bir örnekle anlayacağım

{

SL=NormalizeÇift(Teklif-SondakiDurma*Noktası,Rakamlar);

if(OrderStopLoss()!=SL)

OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);

}

gerçekten eklemek

"""ticket """= OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0); her zaman ve doğru yemek?

 

Ve açıklamaya çalışan herkese teşekkürler.

Ne yazık ki, bir değişkeni önceden fonksiyon olarak tanımlanmış bir değişken olarak nasıl tanımlayacağımı anlamıyorum.

 
Leanid Aladzyeu :

Ve açıklamaya çalışan herkese teşekkürler.

Ne yazık ki, bir değişkeni önceden fonksiyon olarak tanımlanmış bir değişken olarak nasıl tanımlayacağımı anlamıyorum.

Sevgili Leanid, Yardımı okumayı ve hatalar ve uyarılarla çalışmayı öğrenin. Bunu nasıl yapacağınızı öğrenmezseniz, normal şekilde programlamayacaksınız. Bunlar temel bilgiler. Uyarıda yazılanları çevirmeyi denediniz mi? "Doğrulama gerektiren" işlevlerin anlamını anlıyor musunuz? Yardım, bu işlevlerle çalışmanın doğru bir örneğini açıklar. Örneğin, OrderModify(). Yardıma bakın:

Geri dönüş değeri

Başarı durumunda true, başarısızlık durumunda false döndürür. hakkında bilgi almak için   hata , işlevi çağırmanız gerekir   GetLastError() .

ve aşağıdaki bir örnektir:

 bool res=OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble (Bid- Point *TrailingStop, Digits ),OrderTakeProfit(), 0 ,Blue);
if (!res)
   Print ( "Ошибка модификации ордера. Код ошибки=" , GetLastError ());
else
   Print ( "Цена Stop Loss ордера успешно модифицирована." );

Gördüğünüz gibi, fonksiyonun dönüş değeri if-else ifadesinde işlenir. res değişkenine bir nedenden dolayı ihtiyaç vardır. Bu, ticaret işlevinin yürütülmesinin sonucudur! Paranızın bağlı olduğu fonksiyonlar! Buna göre, olası tüm seçenekleri mümkün olduğunca doğru bir şekilde işlemek için (bu örnekte işleme sunulmamaktadır), res değişkeni ve GetLastError() işlevi tarafından döndürülen hata kodu gereklidir. Geliştiriciler, programcıların dikkatle ele alınması gereken "önemli" işlevler olduğunu unutmamaları için bir hatırlatma olarak bilerek uyarılar eklediler! Ayrıca değer kontrol edilmezse hata olmayacağına dikkat edin! Yani bu durumda fonksiyon yine de çalışacak ancak anormal bir durum olursa işleme alınmayacaktır. Anormal durumların listesi - GetLastError() işlevinin dönüş kodları.

Umarım bu daha açıktır.

Коды возврата торгового сервера - Документация на MQL4
  • docs.mql4.com
Коды возврата торгового сервера - Документация на MQL4
 
Leanid Aladzyeu :

Emirleri açma ve değiştirme işlevleri için bir wrapper yazmaya başladım (bu operatörlerden değer döndürmekle sorunlarımı çözeceğini düşündüm), ama aynı sorun var.

Ve bu durumda, bir sarmalayıcı yazmanıza gerek yoktur. Dönüş değeri kontrol uyarısını çözmez! Bu işlevlerin örneklerine bir göz atın ve aynısını yapın!
 
Tapochun :
Ve bu durumda, bir sarmalayıcı yazmanıza gerek yoktur. Dönüş değeri kontrol uyarısını çözmez! Bu fonksiyonların örneklerine bir göz atın ve aynısını yapın!

Yardımda belirtildiği gibi hata veriyor.

yazdım ve sorun yok

if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0))

{

Print("Değişiklik başarılı.");

}

else Print("Sipariş değiştirme hatası .");

 
Kodu mesajlara doğru şekilde ekleyin: Kodu foruma doğru şekilde yerleştirin
 
Karputov Vladimir :
Kodu mesajlara doğru şekilde ekleyin: Kodu foruma doğru şekilde yerleştirin
burada...
 
Leanid Aladzyeu :

Traling neden satış için çalışmıyor? işleri satın almak için!

Genetik derleme sırasında herhangi bir hata veya uyarı yoktur.

İşte kod:

 void Trailing()
  {
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber()==Magic)
           {
             if (OrderType()==OP_BUY)
              {
               if (Bid-OrderOpenPrice()>TrailingStop* Point )
                 {
                   if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep)* Point )
                    {
                     SL= NormalizeDouble (Bid-TrailingStop* Point , Digits );
                     if (OrderStopLoss()!=SL)
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),SL, 0 , 0 ))
                          {
                           Print ( "Модификация прошла успешно." );
                          }
                     else Print ( "Ошибка модификации ордера." );
                    }
                 }
              }
             if (OrderType()==OP_SELL)
              {
               if (OrderOpenPrice()-Ask>TrailingStop* Point )
                 {
                   if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep)* Point )
                    {
                     SL= NormalizeDouble (Ask+TrailingStop* Point , Digits );
                     if (OrderStopLoss()!=SL)
                         if (OrderModify(OrderTicket(),OrderOpenPrice(),SL, 0 , 0 ))
                          {
                           Print ( "Модификация прошла успешно." );
                          }
                     else Print ( "Ошибка модификации ордера." );
                    }
                 }
              }
           }
        }
     }
  }

Neden: