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

 
Sergey Gritsay :
düzeltilmiş siparişleri kapatmak için blokta bir söve vardı.
Çok teşekkür ederim, şimdi kontrol edeceğim!
 

Bana siparişlerin neden açılmadığını söyle. 130 hatası veriyor

input double RSIperiod= 14 ;
input double Urov_70= 70 ;
input double Urov_30= 30 ;
input double Lot= 0.01 ;
input int     TakeProfit= 100 ;
input int     StopLoss= 100 ;
input int     MagicNumber= 523 ;
input int     slippage= 30 ;

double tp= 0 ,sl= 0 ,OrderBuy= 0 ,OrderSell= 0 ;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   tp= NormalizeDouble (TakeProfit* _Point , _Digits );
   sl= NormalizeDouble (StopLoss* _Point , _Digits );
   return ( INIT_SUCCEEDED );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
     tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
     }
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
     }
  }
//+------------------------------------------------------------------+

 

Ben profesyonel değilim - yanılıyor olabilirim!

işte çizgiler

tp= NormalizeDouble (TakeProfit* _Point , _Digits );

sl= NormalizeDouble (StopLoss* _Point , _Digits );

olursa daha net olur

tp= NormalizeDouble ( Ask + TakeProfit* _Point , _Digits );

sl= NormalizeDouble ( Bid - StopLoss* _Point , _Digits );

ve ayrıca global değişkenlerde tp ve sl'nin sıfırlanması gerekmez. duyurmak için yeterlidir.

 
Ibragim Dzhanaev :

Bana siparişin neden açılmadığını söyle. 130 hatası veriyor

...

Hata 130 - durakları kapatın. Minimum durma mesafesinin boyutunu kontrol edin - StopLevel

Ve evet, yukarıda zaten fark ettiniz - onları yanlış sayıyorsunuz.

 

Bunu yaptı - hiçbir şey değişmedi

Evet, az önce açıklandı.

input double RSIperiod= 14 ;
input double Urov_70= 70 ;
input double Urov_30= 30 ;
input double Lot= 0.01 ;
input int     TakeProfit= 100 ;
input int     StopLoss= 100 ;
input int     MagicNumber= 523 ;
input int     slippage= 30 ;

double tp= 0 ,sl= 0 ,OrderBuy= 0 ,OrderSell= 0 ;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   tp= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   sl= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;
///---
  
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
     }
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
     }
  }
//+------------------------------------------------------------------+
 
Ibragim Dzhanaev :

Bunu yaptı - hiçbir şey değişmedi

input double RSIperiod= 14 ;
input double Urov_70= 70 ;
input double Urov_30= 30 ;
input double Lot= 0.01 ;
input int     TakeProfit= 100 ;
input int     StopLoss= 100 ;
input int     MagicNumber= 523 ;
input int     slippage= 30 ;

double tp= 0 ,sl= 0 ,OrderBuy= 0 ,OrderSell= 0 ;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   tp= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   sl= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;
///---
  
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
     }
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
     }
  }
//+------------------------------------------------------------------+


Durakların hesaplanmasını ontik'e aktarın

   tp= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   sl= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );


..

 

tp= NormalizeDouble ( +TakeProfit* _Point , _Digits ) ;
sl= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

Bu, OP_BUY için bir seçenektir

OP_SELL için

tp= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );

sl= NormalizeDouble ( +StopLoss* _Point , _Digits ) ;
 

Hata 148. Her onayda açılır.

input double RSIperiod= 14 ;
input double Urov_70= 70 ;
input double Urov_30= 30 ;
input double Lot= 0.01 ;
input int     TakeProfit= 100 ;
input int     StopLoss= 100 ;
input int     MagicNumber= 523 ;
input int     slippage= 30 ;

double tp,sl,OrderBuy= 0 ,OrderSell= 0 ;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;

   tp= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   sl= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

   tp= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );
   sl= NormalizeDouble ( Ask +StopLoss* _Point , _Digits );

///---

   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );
     }
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );
     }
  }
//+------------------------------------------------------------------+
 

iki farklı değer sl tp

Bunları farklı bir şekilde adlandırın: slSell , slBuy, tpSell, tpBuy

 
RichLux :

iki farklı değer sl tp

Bunları farklı bir şekilde adlandırın: slSell , slBuy, tpSell, tpBuy

Yardım etmedi (

double tp,sl,OrderBuy= 0 ,OrderSell= 0 ;
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {

   for ( int i= 0 ; i< OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber)
           {
             if ( OrderType ()== OP_BUY ){}
             if ( OrderType ()== OP_SELL ){}
           }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if (StopLoss> 0 ) StopLossLevel= Bid -StopLoss* Point ; else StopLossLevel= 0.0 ;
   if (TakeProfit> 0 ) TakeProfitLevel= Ask +TakeProfit* Point ; else TakeProfitLevel= 0.0 ;

   tpBuy= NormalizeDouble ( Ask +TakeProfit* _Point , _Digits );
   slBuy= NormalizeDouble ( Bid -StopLoss* _Point , _Digits );

   tpSell= NormalizeDouble ( Bid -TakeProfit* _Point , _Digits );
   slSell= NormalizeDouble ( Ask +StopLoss* _Point , _Digits );
///---
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrBlue );      
     }      
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,sl,tp, NULL ,MagicNumber, 0 , clrRed );      
     }
  }
//+------------------------------------------------------------------+