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

 

Beyler, bana bunu en iyi nasıl yapacağımı söyleyin: Kaybedilen ve karlı işlemlerden elde edilen galibiyet serilerinin dağılımını görmek istiyorum... Dizilerde güçlü değilim.

Kaybedilen bir satıştan sonra

Fiyat_SonSat=5; Hacim=Hacim*Y; İzm=2; Opn_B=doğru; k=k+1;

/* Buf1[p]=Buf1[p]+1; p=0;

Uyarı ("Karlı ", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", ", Buf1[5], ", " , Buf1[6], ", ", Buf1[7], ", ", Buf1[8], ", ", Buf1[9], ", ", Buf1[10]); */

karlı bir satıştan sonra

Fiyat_SonSat=5; Hacim=HacimAçık; İzm=2; Opn_S=doğru; p=p+1;

/* Buf2[k]=Buf2[k]+1; k=0;

Uyarı ("Karsız ", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], ", " , Buf2[6], ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11] , ", ", Buf2[12], ", ", Buf2[13], ", ", Buf2[14], ", ", Buf2[15]); */

Burada sorun ne? /*'a yazmadan her şey yolunda gidiyor...

 
Сергей :

Beyler, bana bunu en iyi nasıl yapacağımı söyleyin: Kaybedilen ve karlı işlemlerden elde edilen galibiyet serilerinin dağılımını görmek istiyorum... Dizilerde güçlü değilim.

Kaybedilen bir satıştan sonra

Fiyat_SonSat=5; Hacim=Hacim*Y; İzm=2; Opn_B=doğru; k=k+1;

/* Buf1[p]=Buf1[p]+1; p=0;

Uyarı ("Karlı ", Buf1[1], ", ", Buf1[2], ", ", Buf1[3], ", ", Buf1[4], ", ", Buf1[5], ", " , Buf1[6], ", ", Buf1[7], ", ", Buf1[8], ", ", Buf1[9], ", ", Buf1[10]); */

karlı bir satıştan sonra

Price_LastSell=5; Hacim=HacimAçık; İzm=2; Opn_S=doğru; p=p+1;

/* Buf2[k]=Buf2[k]+1; k=0;

Uyarı ("Karsız ", Buf2[1], ", ", Buf2[2], ", ", Buf2[3], ", ", Buf2[4], ", ", Buf2[5], ", " , Buf2[6], ", ", Buf2[7], ", ", Buf2[8], ", ", Buf2[9], ", ", Buf2[10], ", ", Buf2[11] , ", ", Buf2[12], ", ", Buf2[13], ", ", Buf2[14], ", ", Buf2[15]); */

Burada sorun ne? /*'a yazmadan her şey yolunda gidiyor...

Oh-oh... Ve "seriler" kimlerdir ve "dağılımı" nedir?
 

Bir dizi kaybeden ve karlı ticaret. Dağıtım - örneğin, 360 kaybedilen işlemimiz (bu raporda görülebilir), 110 seri 1 kaybedilen işlem, 80 seri 2 kaybeden işlem ve 30 3 kaybeden işlem var.

Bunu ben yaptım:

Kaybeden bir ticareti belirledikten sonra

k=k+1;

Karlı bir ticaret belirledikten sonra

eğer k==1 {k1=k1+1;}

eğer k==2 {k2=k2+1;}

eğer k==3 {k3=k3+1;}

k=0;

Ancak bu girdi, kârsız 15 veya daha fazla seri için çok büyük ve elverişsiz

 
Сергей :

Bir dizi kaybeden ve karlı ticaret. Dağıtım - örneğin, 360 kaybedilen işlemimiz (bu raporda görülebilir), 110 seri 1 kaybedilen işlem, 80 seri 2 kaybeden işlem ve 30 3 kaybeden işlem var.

Bunu ben yaptım:

Kaybeden bir ticareti belirledikten sonra

k=k+1;

Karlı bir ticaret belirledikten sonra

eğer k==1 {k1=k1+1;}

eğer k==2 {k2=k2+1;}

eğer k==3 {k3=k3+1;}

k=0;

Ancak bu girdi, kârsız 15 veya daha fazla seri için çok büyük ve elverişsiz

Göreviniz tam olarak açık değil.

Son kârlı/kaybeden pozisyonlardan bir dizi belirlemeniz mi yoksa tüm işlem geçmişi boyunca tüm bu serileri toplamanız mı gerekiyor?

 
Tarih boyunca. Testin sonunda verileri toplayın ve bırakın. Ama bunu basitçe yapıyorum: ilk kârlı olandan sonra, bir dizi kârsız olandan sonra, miktarı sadece virgülle ayrılmış bir uyarıyla gösteriyorum ... Günlükte buluyorum ve analiz ediyorum. ancak yapmak istediğim kodu diziler üzerinden sadeleştirmek istedim. Mümkün mü? ve bunu yapmanın en iyi yolu nedir?
 
Ibragim Dzhanaev :

Bunu yaptım, şimdi her tıklamada açılmıyor, ancak giriş sinyallerini atlıyor...

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 ()
  {

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) //Цикл по всем ордерам
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ) && OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber) //Выбрали ордер
        {
         if ( OrderType ()== OP_BUY )
           {
            TotalBiu++;                       //Кол. покупок
           }
         if ( OrderType ()== OP_SELL )
           {
            TotalSell++;                     //Кол. продаж
           }
        }
     }
   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 (TotalBiu== 0 )
   if (OrderBuy< 1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket= OrderSend ( _Symbol , OP_BUY ,Lot, Ask ,slippage,slBuy,tpBuy, NULL ,MagicNumber, 0 , clrBlue );      
     }
       if (TotalSell== 0 )    
   if (OrderSell< 1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket= OrderSend ( _Symbol , OP_SELL ,Lot, Bid ,slippage,slSell,tpSell, NULL ,MagicNumber, 0 , clrRed );      
     }
  }
//+------------------------------------------------------------------+


düzeltildi. çalışmalı

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 ()
  {

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

...

 
Sergey Gritsay :

düzeltildi. çalışmalı

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

   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 );
//+------------------------------------------------------------------+


seçimi sıfırlamanız gerekiyor gibi görünüyor

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

seçimi sıfırlamanız gerekiyor gibi görünüyor

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

Teşekkür ederim. Şimdi bazı siparişler sinyalde değil, bazıları da yanlış açılıyor.

 
Sergey Gritsay :

düzeltildi. çalışmalı

 

...

Yazdıklarınız işe yaramadı...
 
Ibragim Dzhanaev :

Teşekkür ederim. Şimdi bazı siparişler sinyalde değil, bazıları da yanlış açılıyor.

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 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 );