Ücretsiz bir danışman yazacağım - sayfa 168

 
Aesen # :
Merhaba Anton, On Balance Volume Divergence EA'mı daha tutarlı bir şekilde karlı hale getirmeme yardım eder misin? Belki koddaki bazı şeyleri değiştirin veya bazı özellikler ekleyin ve daha iyi hale getirin lütfen. kod tamamen çalışıyor ancak ondan aldığım sonuçlardan memnun değilim
#include <trade/trade.mqh>

input double Lots = 0.01 ;
input int VerificationCandles = 20 ;
input int TimeGapCandles = 5 ;

input int TpPoints = 1000 ;
input int SlPoints = 1000 ;

int totalBars;
int handleOBV;

datetime timeLow1, timeLow2, timeHigh1, timeHigh2;
double low1, low2, high1, high2;
datetime timeLowOBV1, timeLowOBV2, timeHighOBV1, timeHighOBV2;
double lowObv1, lowObv2, highObv1, highObv2;

int OnInit (){
   totalBars = iBars ( _Symbol , PERIOD_CURRENT );
   
   handleOBV = iOBV ( _Symbol , PERIOD_CURRENT , VOLUME_TICK );

   return ( INIT_SUCCEEDED );
}

void OnDeinit ( const int reason){

}

void OnTick (){
   int bars = iBars ( _Symbol , PERIOD_CURRENT );
   if (totalBars != bars){
      totalBars = bars;
      
       datetime newTime = 0 ;
       double newlow = 0 , newhigh = 0 ;
      findHighLow(newlow,newhigh,newTime);
      
       datetime newTimeObv = 0 ;
       double newlowOBV = 0 , newhighOBV = 0 ;      
      findHighLowOBV(newlowOBV,newhighOBV,newTimeObv); 
      
       if (newlow != 0 || newlowOBV != 0 ){
         if (newlow != 0 ){
            low2 = low1;
            timeLow2 = timeLow1;
            low1 = newlow;
            timeLow1 = newTime;            
         }   
         if (newlowOBV != 0 ){
            lowObv2 = lowObv1;
            timeLowOBV2 = timeLowOBV1;
            lowObv1 = newlowOBV;
            timeLowOBV1=newTime;
         }
         
         ulong timeGap = TimeGapCandles * PeriodSeconds ( PERIOD_CURRENT );
         if (low1 < low2 && lowObv1 > lowObv2 && ( ulong ) MathAbs (timeLow1-timeLowOBV1) < timeGap && ( ulong ) MathAbs (timeLow2-timeLowOBV2) < timeGap){
             Print ( __FUNCTION__ ," > New Buy Signal...");
            
             double ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );
            ask = NormalizeDouble (ask, _Digits );
            
             double tp = ask + TpPoints * _Point ;
            tp = NormalizeDouble (tp, _Digits );
            
             double sl = ask - SlPoints * _Point ;
            sl = NormalizeDouble (sl, _Digits );
            
            CTrade trade;
            trade.Buy(Lots, _Symbol ,ask,sl,tp);                 
         }
      } 
         
         if (newhigh != 0 || newhighOBV != 0 ){
             if (newhigh != 0 ){
               high2 = high1;
               timeHigh2 = timeHigh1;
               high1 = newhigh;
               timeHigh1 = newTime;
            }
             if (newhighOBV != 0 ){
               highObv2 = highObv1;
               timeHighOBV2 = timeHighOBV1;
               highObv1 = newhighOBV;
               timeHighOBV1 = newTimeObv;
            }
            
           ulong timeGap = TimeGapCandles * PeriodSeconds ( PERIOD_CURRENT );
           if (high1 > high2 && highObv1 < highObv2 && ( ulong ) MathAbs (timeHigh1-timeHighOBV1) < timeGap && ( ulong ) MathAbs (timeHigh2-timeHighOBV2) < timeGap){
             Print ( __FUNCTION__ ," > New Sell Signal...");
            
             double bid = SymbolInfoDouble ( _Symbol , SYMBOL_BID );
            bid = NormalizeDouble (bid, _Digits );
            
             double tp = bid - TpPoints * _Point ;
            tp = NormalizeDouble (tp, _Digits );
            
             double sl = bid + SlPoints * _Point ;
            sl = NormalizeDouble (sl, _Digits );
            
            CTrade trade;
            trade.Sell(Lots, _Symbol ,bid,sl,tp);                  
         }   
      }
   }             
} 
     
void findHighLow( double &newlow, double &newhigh, datetime &newTime){
   int indexBar = VerificationCandles+ 1 ;
   double high = iHigh ( _Symbol , PERIOD_CURRENT ,indexBar);
   double low = iLow ( _Symbol , PERIOD_CURRENT ,indexBar);
   datetime time = iTime ( _Symbol , PERIOD_CURRENT ,indexBar);
      
   bool isHigh = true , isLow = true ;
   for ( int i = 1 ; i <= VerificationCandles; i++){
       double highLeft = iHigh ( _Symbol , PERIOD_CURRENT ,indexBar+i);
       double highRight = iHigh ( _Symbol , PERIOD_CURRENT ,indexBar-i);
       if (highLeft > high || highRight > high) isHigh = false ;
         
       double lowLeft = iLow ( _Symbol , PERIOD_CURRENT ,indexBar+i);
       double lowRight = iLow ( _Symbol , PERIOD_CURRENT ,indexBar-i);
       if (lowLeft < low || highRight < low) isLow = false ;
          
       if (!isHigh && !isLow) break ;
       if (i == VerificationCandles){
         if (isHigh){
             Print ( __FUNCTION__ ," > Found a new high (", DoubleToString (high, _Digits ),") at ",time,"...");
             ObjectCreate ( 0 ,"High@"+ TimeToString (time), OBJ_ARROW_SELL , 0 ,time,high);
            newhigh = high;
            newTime = time;  
         }            
         if (isLow){
             Print ( __FUNCTION__ ," > Found a new low (", DoubleToString (low, _Digits ),") at ",time,"...");
             ObjectCreate ( 0 ,"Low@"+ TimeToString (time), OBJ_ARROW_BUY , 0 ,time,low); 
            newlow = low;
            newTime = time;               
         }
      }   
   }
}
   
void findHighLowOBV( double &newlow, double &newhigh, datetime &newTime){
   int indexBar = VerificationCandles;
   double OBV[];
   if ( CopyBuffer (handleOBV, 0 , 1 ,VerificationCandles* 2 + 1 ,OBV) < VerificationCandles * 2 + 1 ) return ;
   
   double value = OBV[indexBar];
   datetime time = iTime ( _Symbol , PERIOD_CURRENT ,indexBar+ 1 );
      
   bool isHigh = true , isLow = true ;
   for ( int i = 1 ; i <= VerificationCandles; i++){
       double valLeft = OBV[indexBar+i];
       double valRight = OBV[indexBar-i];
       if (valLeft > value || valRight > value) isHigh = false ;      
       if (valLeft < value || valRight < value) isLow = false ;
          
       if (!isHigh && !isLow) break ;
       if (i == VerificationCandles){
         if (isHigh){
             Print ( __FUNCTION__ ," > Found a new high (", DoubleToString (value, _Digits ),") at ",time,"...");
             ObjectCreate ( 0 ,"High@"+ TimeToString (time), OBJ_ARROW_SELL , 1 ,time,value);
            newhigh = value;
            newTime = time;    
         }
         if (isLow){
             Print ( __FUNCTION__ ," > Found a new low (", DoubleToString (value, _Digits ),") at ",time,"...");
             ObjectCreate ( 0 ,"Low@"+ TimeToString (time), OBJ_ARROW_BUY , 1 ,time,value);
            newlow = value;
            newTime = time;    
         }
      }   
   }
} 
Dosyalar:
 
Aesen # :

EA'da olması güzel olacağını düşündüğüm bazı özellikler, fiyat çizelgelerinde ve obv göstergesinde gizli ve düzenli sapma oluştuğunda trend çizgileri, belki güzel bir son durak, ayrıca şuna benzeyen girdiler:


Değişken   Değer

Düzenli Iraksama   Doğru yanlış

Gizli Iraksama   Doğru yanlış

Gösterge Eğilim Çizgileri   Doğru yanlış

Fiyat Eğilim Çizgileri   Doğru yanlış


babypips.com'dan aldığım bu Divergence hile sayfasını takip etmesi için bu OBV Divergence EA'yı almaya çalışıyorum:


Boğa Diverjansı   (Ters Yukarı):

Şamdan Fiyatı - Düşük Düşük

Bakiye Hacmi - Daha Yüksek Düşük


Ayı Sapması (Ters Aşağı):

Şamdan Fiyatı - Daha Yüksek

Denge Hacmi - Düşük Yüksek


Boğa Gizli Iraksama (Trend   Devam Yukarı):

Şamdan Fiyatı - Daha Yüksek Düşük

Denge Hacmi - Düşük Düşük


Ayı Gizli Iraksama (Trend   Devam Aşağı):

Şamdan Fiyatı - Düşük Yüksek

Bakiye Hacmi - Daha Yüksek

A New Approach to Interpreting Classic and Hidden Divergence. Part II
A New Approach to Interpreting Classic and Hidden Divergence. Part II
  • www.mql5.com
The article provides a critical examination of regular divergence and efficiency of various indicators. In addition, it contains filtering options for an increased analysis accuracy and features description of non-standard solutions. As a result, we will create a new tool for solving the technical task.
 
Aesen # :

EA'da olması güzel olacağını düşündüğüm bazı özellikler, fiyat çizelgelerinde ve obv göstergesinde gizli ve düzenli sapma oluştuğunda trend çizgileri, belki güzel bir son durak, ayrıca şuna benzeyen girdiler:


Değişken   Değer

Düzenli Iraksama   Doğru yanlış

Gizli Iraksama   Doğru yanlış

Gösterge Eğilim Çizgileri   Doğru yanlış

Fiyat Eğilim Çizgileri   Doğru yanlış


babypips.com'dan aldığım bu Divergence hile sayfasını takip etmesi için bu OBV Divergence EA'yı almaya çalışıyorum:


Boğa Diverjansı   (Ters Yukarı):

Şamdan Fiyatı - Düşük Düşük

Bakiye Hacmi - Daha Yüksek Düşük


Ayı Sapması (Ters Aşağı):

Şamdan Fiyatı - Daha Yüksek

Denge Hacmi - Düşük Yüksek


Boğa Gizli Iraksama (Trend   Devam Yukarı):

Şamdan Fiyatı - Daha Yüksek Düşük

Denge Hacmi - Düşük Düşük


Ayı Gizli Iraksama (Trend   Devam Aşağı):

Şamdan Fiyatı - Düşük Yüksek

Bakiye Hacmi - Daha Yüksek

Aklıma gelen bir diğer özellik de, EA'nın yerleştirdiği ilk ticaret lehine giderse, mantıklıysa daha fazla ticaret istiflemesiydi....


örneğin, EA bir yükseliş sapması tespit ettiğinde ve bir satın alma sinyali olduğunda ve ilk satın alma işlemi yapıldığında, ticaret EA'nın yerleştirdiği ilk satın alma işleminin lehine giderse, EA satın alma yönünde daha fazla alım satım istifleyecektir. ve bunun tersi bir satış ticareti olsaydı.
 
Aesen # :

Aklıma gelen bir diğer özellik de, EA'nın yerleştirdiği ilk ticaret lehine giderse, mantıklıysa daha fazla ticaret istiflemesiydi....


örneğin, EA bir yükseliş sapması tespit ettiğinde ve bir satın alma sinyali olduğunda ve ilk satın alma işlemi yapıldığında, ticaret EA'nın yerleştirdiği ilk satın alma işleminin lehine giderse, EA satın alma yönünde daha fazla alım satım istifleyecektir. ve bunun tersi bir satış ticareti olsaydı.
Ayrıca, bir ilk ticaretin başlatıldığı, örneğin lot büyüklüğü 0.01 olan bir satın almanın başlatıldığı bir bölge kurtarma riskten korunma stratejisi ekleyebilir misiniz ve bazı piplerle negatif yöne gittiğinde, örneğin 30 pip aşağıda, daha yüksek bir karşı satış etkinleştirilir. lot büyüklüğü, diyelim ki 0.02, burada düşmeye devam ederse, işlemler başabaş veya karla kapanır ve döngü yeniden başlatılır. ancak, satış iyi sonuç vermezse ve fiyat yükselirse, daha yüksek lot büyüklüğünde başka bir alış işlemi, örneğin 0,03, ilk alışın başlatıldığı fiyattan etkinleştirilir. devam ederse ve net sonuçlar kâr ise, döngü işlemleri kârla kapatır ve yeniden başlar. bu nedenle, 30 piplik boşluk sabittir ve bir kurtarma bölgesi olarak adlandırılır, bu da kayıpları ortadan kaldırarak daha yüksek hesaplar için karlı olmasını sağlar. Eğer bu programlamak mümkünse
 
kod komut dosyası mt4 için değil Mt5 içindir
 

Merhaba. MT4 danışmanı için lütfen yazınız:

Mevcut fiyatın MA'sına (mevcut tüm hareketli ayarlarla) dokunduğunuzda, önceden açılmış tüm manuel fırsatları kapatır. Başka bir şey yok (yarı otomatik danışman gibi mi?).

 
torrr mevcut fiyata dokunduğunda tüm açık işlemleri kapatın. Başka bir şey yok.

Merhaba,

Sadece yaptım ve deneyemedim. Umarım işinize yarar.

Selamlar.

 //+------------------------------------------------------------------+
//|                                                     Practica.mq4 |
//|                        Copyright 2022, Antonio Simón Del Vecchio |
//|                     https://www.mql5.com/es/users/simondelvecchio |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Antonio Simón Del Vecchio"
#property link        " https://www.mql5.com/es/users/simondelvecchio "
#property version    "1.00"
#property strict


input int Periodo = 50 ;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   if ( OrdersTotal () > 0 && CruceMediaPrecio())
     {
      Cerrar();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Cerrar()
  {
   double Precio = 0 ;
   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
     {
       if ( OrderSelect (i, SELECT_BY_POS))
        {
         if (OrderType() == OP_BUY)
            Precio = Bid;
         else
            Precio = Ask;
         if (!OrderClose(OrderTicket(), OrderLots(), Precio, 3 , clrNONE ))
             Print ( "Error al cerrar la órden: " , GetLastError ());
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CruceMediaPrecio()
  {
   double Media = iMA ( Symbol (), PERIOD_CURRENT , Periodo, 0 , MODE_SMA , PRICE_CLOSE , 0 );
   double Max = iHigh ( Symbol (), PERIOD_CURRENT , 0 );
   double Min = iLow ( Symbol (), PERIOD_CURRENT , 0 );
   if (Max > Media && Min < Media)
     {
       return ( true );
     }
   return ( false );
  }
//+------------------------------------------------------------------+
 

Kime: Antonio Simon Del Vecchio

Teşekkür ederim! Ben bir çaydanlığım... MetaEditor'da buna ihtiyacım var   bir Uzman Danışman oluşturun , bu kodu yapıştırın, derleyin ve bu kadar mı?

 
torrr bir EA oluşturmam , bu kodu eklemem, derlemem gerekiyor mu ve bu kadar mı?
Doğru. Derlerken, EA, MetaEditor'da bu dosyaya verdiğiniz adla oluşturulacaktır.

Şimdi beni okuyabilenlere genel bir şekilde soruyorum: Tıpkı kodu paylaştığım gibi, EA'yı paylaşmak yasak mı? .exe dosyasını kastettim
 
"Sadece pişirdim ve test etmek için zamanım olmadı." Ve sadece test cihazında pozisyonları kapatan bir Uzman Danışmanı nasıl çalıştırabilirsiniz?