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

 
Sergey Gritsay :

İşte sınıfı kullanan başka bir seçenek

test sonucu

Çok teşekkür ederim, Sergey! Eğer doğru anladıysam:
ilk durumda, her biri sabit bir zaman çerçevesine sahip kendi sembolü için bir dizi statik değişken oluşturulur, yani. bu sembol için başka bir zaman dilimi kullanılamaz;
ikincisinde - her sembol+zaman aralığı kombinasyonu için bir sınıf.
 
MikeZv :
Çok teşekkür ederim, Sergey! Eğer doğru anladıysam:
ilk durumda, her biri sabit bir zaman çerçevesine sahip kendi sembolü için bir dizi statik değişken oluşturulur, yani. bu sembol için başka bir zaman dilimi kullanılamaz;
ikincisinde - her sembol+zaman aralığı kombinasyonu için bir sınıf.
Evet doğru ama biraz düşünürseniz dizi versiyonunda tek boyutlu diziyi iki boyutlu diziyle değiştirebilirsiniz.
 
Bir soru. Herhangi bir yerde açma ve kapama koşulu olmadan siparişleri açmak, kontrol etmek ve kapatmak için bir şablon kodu gören var mı? Durumu kendim yazmaya çalışacağım ama bir siparişin kapanışını, hata üstüne hata yazmaya şöyle başlıyorum... Özellikle siparişlerin kapanış için aranması ve kontrol edilmesi pek iyi sonuç vermiyor.
 
Vitaliy Medvedev :
Bir soru. Herhangi bir yerde açma ve kapama koşulu olmadan siparişleri açmak, kontrol etmek ve kapatmak için bir şablon kodu gören var mı? Durumu kendim yazmaya çalışacağım ama bir siparişin kapanışını, hata üstüne hata yazmaya şöyle başlıyorum... Özellikle siparişlerin kapanış için aranması ve kontrol edilmesi pek iyi sonuç vermiyor.

İyi çalışmamasına şaşmamalı. Sonuçta, herhangi bir kapatma koşulu yoksa, bu tür emirlerin aranması ve doğrulanması şu şekilde olmalıdır: bir şey bul, ne olduğunu bilmiyorum ve kapat.

İlk önce, kapatılacak siparişleri seçme koşullarına karar verin, ardından bunu anlamak daha kolay olacaktır. Sonuçta, herhangi bir yanlış anlama varsa, yalnızca bilinen koşullara uygunluğu kontrol etmek için kalır.

 
Yury Reshetov :

İyi çalışmamasına şaşmamalı. Sonuçta, herhangi bir kapatma koşulu yoksa, bu tür emirlerin aranması ve doğrulanması şu şekilde olmalıdır: bir şey bul, ne olduğunu bilmiyorum ve kapat.

İlk önce, kapatılacaksiparişleri seçme koşullarına karar verin, ardından bunu anlamak daha kolay olacaktır. Sonuçta, herhangi bir yanlış anlama varsa, yalnızca bilinen koşullara uygunluğu kontrol etmek için kalır.

Hepsi açık, şartlara karar verdim ama şartlara göre emirlerin açılması (açılma hala saçmalık, açma, yarı yarıya kederle çıkıyor ...),

ve dahası, siparişlerin doğru kapanması... Sonunda BYADA!

 
Vitaliy Medvedev :

Hepsi açık, şartlara karar verdim ama şartlara göre emirlerin açılması (açılma hala saçmalık, açma, yarı yarıya kederle çıkıyor ...),

ve dahası, siparişlerin doğru kapanması... Sonunda BYADA!

Kapatmak için hangi siparişin seçildiğini öğrendikten sonra, bilet numarasına göre kapatın.
 
Vitaliy Medvedev :

Hepsi açık, şartlara karar verdim ama şartlara göre emirlerin açılması (açılma hala saçmalık, açma, yarı yarıya kederle çıkıyor ...),

ve dahası, siparişlerin doğru kapanması... Sonunda BYADA!

Tut onu kalbimden koparıyormuşum gibi

 int Total_orders( int type)
  {
   int n= 0 ;
   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderType ()!=type) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
      n++;
     }
   return (n);
  }
//+------------------------------------------------------------------+
void OrderOpen( int type, double sl)
  {
   double price= 0.0 ;
   double lot;

   if (error> 1 ) return ;
   if (type== WRONG_VALUE ) return ;

   if (Risk!= 0.0 )lot=LotNormalize(LotVolume(Risk,sl));
   else lot=LotNormalize(Lot);

   do
     {
       if (type== OP_BUY )
        {
         RefreshRates ();
         price= NormalizeDouble ( Ask , _Digits );
         if ( AccountFreeMarginCheck ( _Symbol ,type,lot)<= 0 ) return ;
        }
       if (type== OP_SELL )
        {
         RefreshRates ();
         price= NormalizeDouble ( Bid , _Digits );
         if ( AccountFreeMarginCheck ( _Symbol ,type,lot)<= 0 ) return ;
        }

       int Ticket= OrderSend ( _Symbol ,type,lot,price, 10000 , 0 , 0 ,CommentOrder,Magic);
       if (Ticket> 0 )
        {
         error=Fun_Error( _Symbol , GetLastError ());
         Alert ( __FUNCTION__ , ": open order " ,StrToType(type), " " , _Symbol , " :" ,Ticket);
        }
       else error=Fun_Error( _Symbol , GetLastError ());
     }
   while (error== 1 && ! IsStopped ());

  }
//+------------------------------------------------------------------+
void Order_Close( int type)
  {
   double price= 0.0 ;
   int total= OrdersTotal ();
   if (error> 1 ) return ;

   for ( int i=total- 1 ; i>= 0 ; i--)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderType ()!=type) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       do
        {
         if ( OrderType ()== OP_BUY )
           {
             RefreshRates ();
            price= NormalizeDouble ( Bid , _Digits );
           }
         if ( OrderType ()== OP_SELL )
           {
             RefreshRates ();
            price= NormalizeDouble ( Ask , _Digits );
           }
         int res= OrderClose ( OrderTicket (), OrderLots (),price, 10000 );
         if (res)
           {
             Alert ( __FUNCTION__ , ": close order " ,StrToType( OrderType ()), " " , OrderSymbol (), " :" , OrderTicket ());
            error=Fun_Error( _Symbol , GetLastError ());
           }
         else error=Fun_Error( _Symbol , GetLastError ());
        }
       while (error== 1 && ! IsStopped ());
     }
  }
//+------------------------------------------------------------------+
void ModifySL( int Stop_Loss)
  {
   if (Stop_Loss<= 0 ) return ;
   double sl= 0.0 ;
   bool res;

   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderStopLoss ()!= 0 ) continue ;
       if ( OrderType ()== OP_BUY )  sl= NormalizeDouble ( OrderOpenPrice ()-(New_Stop(Stop_Loss)* _Point ), _Digits );
       if ( OrderType ()== OP_SELL ) sl= NormalizeDouble ( OrderOpenPrice ()+(New_Stop(Stop_Loss)* _Point ), _Digits );
      res= OrderModify ( OrderTicket (), OrderOpenPrice (),sl, OrderTakeProfit (), 0 );
       if (!res) Print ( __FUNCTION__ , ": Error modifying StopLoss order " ,StrToType( OrderType ()), " № - " , GetLastError (), " " , OrderSymbol (), " " , OrderTicket ());
     }
  }
//+------------------------------------------------------------------+
void ModifyTP( int Take_Profit)
  {
   if (Take_Profit<= 0 ) return ;
   double tp= 0.0 ;
   bool res;

   int total= OrdersTotal ();

   for ( int i= 0 ; i<total; i++)
     {
       if (! OrderSelect (i, SELECT_BY_POS )) continue ;
       if ( OrderMagicNumber ()!=Magic) continue ;
       if ( OrderSymbol ()!= _Symbol ) continue ;
       if ( OrderTakeProfit ()!= 0 ) continue ;
       if ( OrderType ()== OP_BUY ) tp= NormalizeDouble ( OrderOpenPrice ()+(New_Stop(Take_Profit)* _Point ), _Digits );
       if ( OrderType ()== OP_SELL ) tp= NormalizeDouble ( OrderOpenPrice () -(New_Stop(Take_Profit)* _Point ), _Digits );
      res= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),tp, 0 );
       if (!res) Print ( __FUNCTION__ , ": Error modifying TakeProfit order " ,StrToType( OrderType ()), " № - " , GetLastError (), " " , OrderSymbol (), " " , OrderTicket ());
     }
  }
//+------------------------------------------------------------------+
double LotVolume( double procent, double sl)
  {
   double lot= 0.0 ;
   double tv= MarketInfo ( _Symbol , MODE_TICKVALUE );
   double minlot= MarketInfo ( _Symbol , MODE_MINLOT );
   double maxlot= MarketInfo ( _Symbol , MODE_MAXLOT );

   if (sl!= 0 && tv!= 0 ) lot=( AccountFreeMargin ()*procent)/(sl*tv* 100.0 );

   if (lot < minlot)lot = minlot;
   if (lot > maxlot)lot = maxlot;
   return (lot);
  }
//+------------------------------------------------------------------+
double LotNormalize( double lot)
  {
   double minlot= MarketInfo ( _Symbol , MODE_MINLOT );
   double maxlot= MarketInfo ( _Symbol , MODE_MAXLOT );

   if (lot < minlot)lot = minlot;
   if (lot > maxlot)lot = maxlot;

   if (minlot== 0.001 ) return ( NormalizeDouble (lot, 3 ));
   if (minlot== 0.01 )   return ( NormalizeDouble (lot, 2 ));
   if (minlot== 0.1 )   return ( NormalizeDouble (lot, 1 ));

   return ( NormalizeDouble (lot, 0 ));
  }
//+------------------------------------------------------------------+
string StrToType( int type)
  {
   if (type== OP_BUY ) return ( "Buy" );
   if (type== OP_SELL ) return ( "Sell" );
   return ( NULL );
  }
//+------------------------------------------------------------------+
int New_Stop( int Parametr)
  {
   int Min_Dist=( int ) MarketInfo ( _Symbol , MODE_STOPLEVEL );
   if (Parametr<Min_Dist)
     {
      Parametr=Min_Dist* 2 +( int ) MarketInfo ( _Symbol , MODE_SPREAD );
       Alert ( _Symbol , " Увеличина дистанция стоп-приказа." );
     }
   return (Parametr);
  }
//+------------------------------------------------------------------+
int Fun_Error( string symbol, int Error)
  {
   switch (Error)
     {
       case 0 : return ( 0 );
       case 1 : Alert (symbol, " " ,Error, ":No error returned, but the result is unknown" ); return ( 2 );
       case 2 : Alert (symbol, " " ,Error, ":Common error" ); return ( 2 );
       case 3 : Alert (symbol, " " ,Error, ":Invalid trade parameters" ); return ( 2 );
       case 4 : Alert (symbol, " " ,Error, ":Trade server is busy" ); Sleep ( 3000 ); return ( 1 );
       case 5 : Alert (symbol, " " ,Error, ":Old version of the client terminal" ); return ( 2 );
       case 6 : Alert (symbol, " " ,Error, ":No connection with trade server" ); Sleep ( 3000 ); return ( 1 );
       case 7 : Alert (symbol, " " ,Error, ":Not enough rights" ); return ( 2 );
       case 8 : Alert (symbol, " " ,Error, ":Too frequent requests" ); return ( 2 );
       case 9 : Alert (symbol, " " ,Error, ":Malfunctional trade operation" ); return ( 2 );
       case 64 : Alert (symbol, " " ,Error, ":Account disabled" ); return ( 2 );
       case 65 : Alert (symbol, " " ,Error, ":Invalid account" ); return ( 2 );
       case 128 : Alert (symbol, " " ,Error, ":Trade timeout" ); return ( 1 );
       case 129 : Alert (symbol, " " ,Error, ":Invalid price" ); return ( 2 );
       case 130 : Alert (symbol, " " ,Error, ":Invalid stops" ); return ( 2 );
       case 131 : Alert (symbol, " " ,Error, ":Invalid trade volume" ); return ( 2 );
       case 132 : Alert (symbol, " " ,Error, ":Market is closed" ); Sleep ( 10000 ); return ( 1 );
       case 133 : Alert (symbol, " " ,Error, ":Trade is disabled" ); return ( 2 );
       case 134 : Alert (symbol, " " ,Error, ":Not enough money" ); return ( 2 );
       case 135 : Alert (symbol, " " ,Error, ":Price changed" ); return ( 1 );
       case 136 : Alert (symbol, " " ,Error, ":Off quotes" ); Sleep ( 3000 ); return ( 1 );
       case 137 : Alert (symbol, " " ,Error, ":Broker is busy" ); Sleep ( 3000 ); return ( 1 );
       case 138 : Alert (symbol, " " ,Error, ":Requote" ); return ( 1 );
       case 139 : Alert (symbol, " " ,Error, ":Order is locked" ); Sleep ( 10000 ); return ( 1 );
       case 140 : Alert (symbol, " " ,Error, ":Buy orders only allowed" ); return ( 2 );
       case 141 : Alert (symbol, " " ,Error, ":Too many requests" ); return ( 2 );
       case 145 : Alert (symbol, " " ,Error, ":Modification denied because order is too close to market" ); Sleep ( 10000 ); return ( 1 );
       case 146 : Alert (symbol, " " ,Error, ":Trade context is busy" ); Sleep ( 3000 ); return ( 1 );
       case 147 : Alert (symbol, " " ,Error, ":Expirations are denied by broker" ); return ( 2 );
       case 148 : Alert (symbol, " " ,Error, ":The amount of open and pending orders has reached the limit set by the broker" ); return ( 2 );
       case 149 : Alert (symbol, " " ,Error, ":An attempt to open an order opposite to the existing one when hedging is disabled" ); return ( 2 );
       case 150 : Alert (symbol, " " ,Error, ":An attempt to close an order contravening the FIFO rule" ); return ( 2 );
       default : Alert (symbol, ":Error - № " ,Error); return ( 2 );
     }
   return ( 0 );
  }
 
Sergey Gritsay :

Tut onu kalbimden koparıyormuşum gibi

Ah ... Ve siktir etme! Benim, pek bir şey yapmadım..! Mdya ... şimdi neden hiçbir şeyin olması gerektiği gibi çalışmadığını anlıyorum.

Sana çok büyük insan, Teşekkürler!


 
Sergey Gritsay :

Tut onu kalbimden koparıyormuşum gibi

Bunu neden yaptığını öğrenebilir miyim?

int toplam= SiparişlerToplam ();

 
Vasyl Nosal :

Bunu neden yaptığını öğrenebilir miyim?

int toplam= SiparişlerToplam ();

Çünkü döngünün yürütülmesi sırasında OrdersTotal () değeri; değişebilir ve sırayı atlayabilirsiniz veya döngünün gövdesi hatalı