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

 
Vitaly Muzichenko :

Mevcut bir çubuğu kontrol ediyorsunuz double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );

Fiyat yükselir, 70 seviyesini geçer ve ticarete giriş olur. Çubuk kapandığında, zaten RSI'nin daha düşük olduğunu görüyorsunuz, ancak bundan önce daha yüksekti ve ardından seviyenin altına geri döndü.

Kapalı bir çubuğu kontrol edin, o zaman bu olmayacak ve girişler onaylanmış bir sinyalde olacaktır:

çift rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );

double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );

Açık. Teşekkür ederim.
 

Şu şekilde yazılmış: (muhtemelen yanlış)

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   OrderBuy= 0 ; OrderSell= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) //Цикл по всем ордерам
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) //Выбрали ордер
        {
         if ( OrderType ()== OP_BUY )
           {
            OrderBuy++;                       //Кол. покупок
           }
         if ( OrderType ()== OP_SELL )
           {
            OrderSell++;                     //Кол. продаж
           }
        }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
   double rsi2= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );
//+------------------------------------------------------------------+

   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== 0 && rsi>Urov_70 && rsi1<Urov_70 && rsi2<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
   if (OrderSell== 0 && rsi<Urov_30 && rsi1>Urov_30 && rsi2>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
  }
//+------------------------------------------------------------------+

Sonuç şudur: Kavşak olmadığında siparişler açılır...


 
Ibragim Dzhanaev :

Şu şekilde yazılmış: (muhtemelen yanlış)

        }
     }
   double rsi= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 );
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
   double rsi2= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );
//+------------------------------------------------------------------+

   double StopLossLevel;

Sonuç şudur: Kavşak olmadığında siparişler açılır...

Geçerli çubuğa neden ihtiyacınız var double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 ); ???

Yeniden yazılan kodunuz öncekiyle tamamen aynı koşulu yerine getiriyor, sıfır barda fiyat seviyeyi geçti ve bir anlaşma açıldı, daha sonra fiyat geri döndü ve RSI seviyenin altına döndü, sonuç olarak bar kapandıktan sonra, artık sinyal yok.

Hesaplamada sıfır çubuğunu kullanmayın.

 
Vitaly Muzichenko :

Geçerli çubuğa neden ihtiyacınız var double rsi = iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 0 ); ???

Yeniden yazılan kodunuz öncekiyle tamamen aynı koşulu yerine getiriyor, sıfır barda fiyat seviyeyi geçti ve bir anlaşma açıldı, daha sonra fiyat geri döndü ve RSI seviyenin altına döndü, sonuç olarak bar kapandıktan sonra, artık sinyal yok.

Hesaplamada sıfır çubuğunu kullanmayın.

İşler. Teşekkür ederim.
 

Söyle neden hata veriyor?

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   OrderBuy= 0 ; OrderSell= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) //Цикл по всем ордерам
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) //Выбрали ордер
        {
         if ( OrderType ()== OP_BUY )
           {
            OrderBuy++;                       //Кол. покупок
           }
         if ( OrderType ()== OP_SELL )
           {
            OrderSell++;                     //Кол. продаж
           }
        }
     }
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
   double rsi2= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );
//+------------------------------------------------------------------+

   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 (CountBuy()+CountSell()== 0 && rsi1>Urov_70 && rsi2<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
   if (CountBuy()+CountSell()== 0 && rsi1<Urov_30 && rsi2>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_BUY )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
 
Ibragim Dzhanaev :

Söyle neden hata veriyor?

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   OrderBuy= 0 ; OrderSell= 0 ;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) //Цикл по всем ордерам
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) //Выбрали ордер
        {
         if ( OrderType ()== OP_BUY )
           {
            OrderBuy++;                       //Кол. покупок
           }
         if ( OrderType ()== OP_SELL )
           {
            OrderSell++;                     //Кол. продаж
           }
        }
     }
//double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 1 );
   double rsi2= iRSI ( _Symbol , 0 ,RSIperiod, PRICE_CLOSE , 2 );
//+------------------------------------------------------------------+

   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 (CountBuy()+CountSell()== 0 && rsi1>Urov_70 && rsi2<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
   if (CountBuy()+CountSell()== 0 && rsi1<Urov_30 && rsi2>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );
       if (tiket< 0 ) Print ( "Ошибка открытия ордера № - " , GetLastError ());
     }
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_BUY )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
bu arada burada
for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
olmalı
for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--);
aksi takdirde son siparişi kaçıracaksınız
 
Ibragim Dzhanaev :

Söyle neden hata veriyor?


   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES )== true )
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+

ekstra ";"

int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--) ;  <<<
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_BUY )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--) ;  <<<
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }

Ve böylece bu durumda daha iyi olacak:

for ( int trade= 0 ; trade< OrdersTotal (); trade++)
 
Sergey Gritsay :
bu arada burada
for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--);
olmalı
for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--);
aksi takdirde son siparişi kaçıracaksınız
Teşekkür ederim.
 
Vitaly Muzichenko :

ekstra ";"

int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--) ;  <<<
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_BUY )
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade> 0 ; trade--) ;  <<<
     {
       if ( OrderSelect (trade, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== _Symbol && OrderMagicNumber ()==MagicNumber && OrderType ()== OP_SELL )
            count++;
        }
     }
   return (count);
  }

Ve böylece bu durumda daha iyi olacak:

for ( int trade= 0 ; trade< OrdersTotal (); trade++)
Teşekkür ederim.
 

herkese merhaba, bir ifade nasıl yazılır

beşinci parti, lot 1 ve 4 siparişlerinin toplamına eşittir

ilkini veya sonunu bilet tanımından bulabilirsiniz

ve mevcut şebekedeki sabit değişiklik göz önüne alındığında herhangi bir ara madde nasıl bulunur?

her siparişin bir şekilde ve bir yerde saklanması gerektiği anlamına gelir

peki fark var mı?

arasında

void OnTick ()
  {
     if uslovie1== true    {...}
     if uslovie2== true    {...}
     if uslovie3== true    {...}
  }

И

void OnTick ()
  {
     {
         if uslovie1== true
                   {...}
         else    if    {...}
         else    if    {...}
     }
  }