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

 
Taras Slobodyanik # :

bu nedenle, yine de her yeni onaydaki koşulları kontrol etmeniz gerekir, önceki onayda çalışmadıysa, yenisinde değişecektir.

Peki, hata işleme yapmanız gerekir.

Bunu bir dizi aracılığıyla yaparsanız, yalnızca içinde yazılı olan değiştirilmiş siparişlerin biletlerini diğerleriyle birlikte kontrol edin.

MakarFX # :
Bunun gibi, evet, teşekkürler. Bu durumda, nesne olarak kaydedilirlerse, biletler yerine benzersiz büyüler daha iyidir, aksi takdirde aynı ada sahip düzinelerce nesne ortaya çıkar.

 StringToInteger ( ObjectName ( 0 ,i, 0 )
Yazım hatası mı? Görünüşe göre her iki fonksiyon da sadece bir parametre alabilir.
 
Документация по MQL5: Графические объекты / ObjectName
Документация по MQL5: Графические объекты / ObjectName
  • www.mql5.com
ObjectName - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Nerd Trader # :
Bunu bir dizi aracılığıyla yaparsanız, yalnızca içinde yazılı olan değiştirilmiş siparişlerin biletlerini diğerleriyle birlikte kontrol edin.

Bunun gibi, evet, teşekkürler. Bu durumda, nesne olarak kaydedilirlerse, biletler yerine benzersiz büyüler daha iyidir, aksi takdirde aynı ada sahip düzinelerce nesne ortaya çıkar .

Yazım hatası mı? Görünüşe göre her iki fonksiyon da sadece bir parametre alabilir.

üreme

 if ( ObjectName (i)!=OrderTicket()) ObjectDelete ( 0 , ObjectName (i));

Afedersiniz

 StringToInteger ( ObjectName (i));
 
MakarFX # :

üreme

Afedersiniz

Bu arada, aşağıdaki hatanın neden periyodik olarak oluştuğunu biliyor musunuz? Başarıyla açılan 100 sipariş için yaklaşık 10 tane var.

 2021.10.10 16:18:09.853	2021.01.05 21:15:00  test EURUSD,M5: 4051 | order.sl_price: 2.813499706815862e-262
2021.10.10 16:18:09.853	2021.01.05 21:15:00  test EURUSD,M5: OrderSend error 4051
2021.10.10 16:18:09.853	2021.01.05 21:15:00  test EURUSD,M5: unknown trade cmd 406958564 for OrderSend function

order.sl_price: 2.813499706815862e-262 - zararı durdur fiyatı, açıkçası bu sayı olmamalıdır.
4051 - "Geçersiz fonksiyon parametre değeri"
bilinmeyen ticaret cmd sipariş türü nedir? Bu da sorun olmamalı.

 class Order{
   public :
     double open_price;
     double sl_price;
     double tp_price;
     color   arrow_color;
     string error_text;
     int cmd;

    Order(){};

     void InitForSell( string type = "" ){
       if (type == "" ){
         Print ( "Ошибка: 'type' должен иметь значение" );
         return ;
      }

       sl_price = NormalizeDouble (db_last.hight + (sl_indent* Point ), Digits ); // (цена + (кол-во пипсов* Point )


      arrow_color = clrRed ;

       if (type == "sellstop" ){
        open_price = NormalizeDouble (db_last.low - (order_indent* Point ), Digits );

         if (tp_size != 0 )
          tp_price = NormalizeDouble (db_last.low - (order_indent+tp_size)* Point , Digits );
         else
          tp_price = 0 ;

        cmd = OP_SELLSTOP;
        error_text = "Ошибка открытия селстопа " ;
      }

       if (type == "sell" ){
        open_price = Bid;

         if (tp_size != 0 )
          tp_price = NormalizeDouble (Bid - tp_size* Point , Digits );
         else
          tp_price = 0 ;

        cmd = OP_SELL;
        error_text = "Ошибка открытия села " ;
      }
    };

     void InitForBuy( string type = "" ){
       if (type == "" ){
         Print ( "Ошибка: 'type' должен иметь значение" );
         return ;
      }

       sl_price = NormalizeDouble (db_last.low - (sl_indent* Point ), Digits ); // (цена + (кол-во пипсов* Point )


      arrow_color = clrGreen ;

       if (type == "buystop" ){
        open_price = NormalizeDouble (db_last.hight + (order_indent* Point ), Digits );

         if (tp_size != 0 )
          tp_price = NormalizeDouble (db_last.hight + (order_indent+tp_size)* Point , Digits );
         else
          tp_price = 0 ;

        cmd = OP_BUYSTOP;
        error_text = "Ошибка открытия байстопа " ;
      }

       if (type == "buy" ){
        open_price = Ask;

         if (tp_size != 0 )
          tp_price = NormalizeDouble (Bid + tp_size* Point , Digits );
         else
          tp_price = 0 ;

        cmd = OP_BUY;
        error_text = "Ошибка открытия бая " ;
      }
    };

    ~Order(){};
};

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

if (...)
  {
     ResetLastError ();
     int order_send = OrderSend ( Symbol (), order.cmd, 0.01 , order.open_price, 1 , 
    order.sl_price, order.tp_price, "" , 0 , 0 , order.arrow_color);

     if (order_send == - 1 ) return ;
  }
 
MakarFX # :
Biletler veya fiyat için "min ve max" mı demek istiyorsunuz?

Biletlere göre

 
Nerd Trader # :

Bu arada, aşağıdaki hatanın neden periyodik olarak oluştuğunu biliyor musunuz? Başarıyla açılan 100 sipariş için yaklaşık 10 tane var.

order.sl_price: 2.813499706815862e-262 - zararı durdur fiyatı, açıkçası bu sayı olmamalıdır.
4051 - "Geçersiz fonksiyon parametre değeri"
bilinmeyen ticaret cmd sipariş türü nedir? Bu da sorun olmamalı.

"NormalizeDouble"ı hareket ettirmeyi deneyin

 if (...)
  {
     ResetLastError ();
     int order_send = OrderSend ( Symbol (), order.cmd, 0.01 , NormalizeDouble (order.open_price, Digits ), 1 , 
     NormalizeDouble (order.sl_price, Digits ), NormalizeDouble (order.tp_price, Digits ), "" , 0 , 0 , order.arrow_color);

     if (order_send == - 1 ) return ;
  }

 
EVGENII SHELIPOV # :

Biletlere göre

 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает суммарный профит открытых позиций в пунктах         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetProfitOpenPosInPoint( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p;
   int     i, k= OrdersTotal (), pr= 0 ;

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (mn< 0 || OrderMagicNumber()==mn) {
           if (OrderTicket()== GetTicketMaxMinOrder( 0 ) || OrderTicket()== GetTicketMaxMinOrder( 1 ) ) {
             p=MarketInfo(OrderSymbol(), MODE_POINT);
             if (p== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) p= 0.0001 ; else p= 0.01 ;
             if (OrderType()==OP_BUY) {
               pr+=(MarketInfo(OrderSymbol(), MODE_BID)-OrderOpenPrice())/p;
             }
             if (OrderType()==OP_SELL) {
               pr+=(OrderOpenPrice()-MarketInfo(OrderSymbol(), MODE_ASK))/p;
            }
           }
        }
      }
    }
  }
   return (pr);
}
 
MakarFX # :

"NormalizeDouble"ı hareket ettirmeyi deneyin

değişiklik yapmadan

 
MakarFX # :

Makar, kodu danışmana şimdiye kadar sadece para birimindeki karı ve puandaki karı karşılaştırmak için ekledi, anladığım kadarıyla bu, bu fonksiyonların sıfır değerleri olduğunda anlaşılabilir.