[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 706

 

oluşturulan ok göstergeleri . Allah'ın yardımıyla kim ne anladıysa yarattılar. Şimdi birleştirmeye, 2'yi bir arada yapmaya karar verdim....... Fikrin özü: MACD var, + ve - içinde belirli seviyeler ayarlayın. MACD bu seviyelerin gerisinde olduğunda (hem + hem de - içinde), bir al ve sat oku belirir. Yapmış gibi görünüyor, hatasız derliyor AMA AMA bir şekilde yanlış çalışıyor, peki, öyle değil ....

 //+------------------------------------------------------------------+
//|                                               Indicator_MACD.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
// Modify Vinin
#property copyright ""
#property link       ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int        Fast_EMA= 8 ;
extern int        Slow_EMA= 34 ;
extern double     N = 0.0015 ;
extern int        A = 10 ;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double MACD[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 3 );
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexBuffer ( 2 ,MACD);
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars=IndicatorCounted();
   int limit = Bars -counted_bars- 1 ;
   
   for ( int i = limit; i>= 0 ; i--) {
      ExtMapBuffer2[i] = EMPTY;
      ExtMapBuffer1[i] = EMPTY;
      MACD[i]= iMACD ( NULL , 0 ,Fast_EMA,Slow_EMA, 1 , 1 ,MODE_MAIN, i);
       if ((MACD[i]>MACD[i+ 1 ]) || (MACD[i]<MACD[i+ 1 ]))
      {
       if ( MACD[i] <-N) ExtMapBuffer2[i] = Low[i]-A* Point ;
       if ( MACD[i] > N) ExtMapBuffer1[i] = High[i]+A* Point ; 
      }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+ 

bu bir çalışma göstergesi

 

Ve bu oldu.......

 //+------------------------------------------------------------------+
//|                                           ndicator_MACD_OsMA.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
// Modify Vinin
#property copyright ""
#property link       ""

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int        F_EMA= 8 ;       // пар-ры MACD
extern int        S_EMA= 34 ;     // пар-ры MACD
extern double     N = 0.0015 ;   // контр. линия
extern int        A = 10 ;       // расстояние от бара
extern int        Fast_EMA= 12 ;   // пар-ры OsMA
extern int        Slow_EMA= 26 ;   // пар-ры OsMA
extern int        Signal_EMA= 9 ; // пар-ры OsMA
extern double     Z = 0.00005 ;   // контр. линия
extern int        B = 10 ;       // расстояние от бара

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double MACD[];
double OsMA[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers( 3 );
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );
   SetIndexBuffer ( 2 ,MACD);
   SetIndexBuffer ( 2 ,OsMA);
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars=IndicatorCounted();
   int limit = Bars -counted_bars- 1 ;
   
   for ( int i = limit; i>= 0 ; i--) {
      ExtMapBuffer2[i] = EMPTY;
      ExtMapBuffer1[i] = EMPTY;
      MACD[i]= iMACD ( NULL , 0 ,F_EMA,S_EMA, 1 , 1 ,MODE_MAIN, i);
      OsMA[i]= iOsMA ( NULL , 0 ,Fast_EMA,Slow_EMA,Signal_EMA, PRICE_OPEN ,i);
       if (((MACD[i]>MACD[i+ 1 ])||(MACD[i]<MACD[i+ 1 ]))&&((OsMA[i]>OsMA[i+ 1 ])||(OsMA[i]<OsMA[i+ 1 ])))
      {
       if ( MACD[i] <-N) ExtMapBuffer2[i] = Low[i]-A* Point ;
       if ( MACD[i] > N) ExtMapBuffer1[i] = High[i]+A* Point ;
       if ( OsMA[i] <-Z) ExtMapBuffer2[i] = Low[i] -B* Point ;
       if ( OsMA[i] > Z) ExtMapBuffer1[i] = High[i]+B* Point ; 
      }
   }
   return ( 0 );
}
//+------------------------------------------------------------------+ 

Kodda bir yanlışlık hissediyorum ama ne olduğunu anlamıyorum ................................. Şanssız olanı SÖYLE .. ... : -))

 
Ve neden Alıntılar Arşivinde en temel çiftler yok: EUR/USD , USD/JPY? Belki yanlış bir şey yapıyorum?
 

Merhaba! KimIV'ten gelen özellikler için Artyom'a teşekkürler .

Belki biri biliyordur: TakeProfitLastClosePos() işlevlerinden biri (son kapatılan pozisyonun TakeProfit fiyatını veya -1 döndürür), TakeProfit değerini dört ondalık basamakla döndürür ve DC'm beş ondalık basamak verir (EURUSD çifti). Son kapatılan pozisyonun TakeProfit değeri ile bir sonraki emir verme fiyatının değeri doğrudan ilişkili olduğundan bir sonraki emrin verilmesi mümkün değildir. Bu durumdan kurtulmaya yardım et? Şimdiden teşekkürler!!!

 double TakeProfitLastClosePos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime t;
   double    r=- 1 ;
   int       i, k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                r=OrderTakeProfit();
              }
            }
          }
        }
      }
    }
  }
   return (r);
}
 
dimon74 :

Merhaba! KimIV'ten gelen özellikler için Artyom'a teşekkürler .

Belki biri biliyordur: TakeProfitLastClosePos() işlevlerinden biri (son kapatılan pozisyonun TakeProfit fiyatını veya -1 döndürür), TakeProfit değerini dört ondalık basamakla döndürür ve DC'm beş ondalık basamak verir (EURUSD çifti). Son kapatılan pozisyonun TakeProfit değeri ile bir sonraki emir verme fiyatının değeri doğrudan ilişkili olduğundan bir sonraki emrin verilmesi mümkün değildir. Bu durumdan kurtulmaya yardım et? Şimdiden teşekkürler!!!


Genel olarak işlev, ondalık noktadan sonra tüm önemli basamakları içeren bir değer döndürür. Ondalık noktadan sonra en az sekiz. Varsayılan olarak sadece 4 basamak görüntüler. Ancak DoubleToStr()'ı önceden kullanırsanız, bundan emin olabilirsiniz.
 
drknn :
OrderSend(Döviz çiftinin karakter adı .... kuyu ve diğer parametreler......)


Çoklu para birimi Uzman Danışman kodunu anlamama yardım et, herhangi bir çiftte bir Uzman Danışman çalışması ve ticaretinin açılması gerekiyor.

CodeBase'de çok para birimi danışmanı buldum ama neyin nerede ve neden olduğunu çözemiyorum.

Test cihazında böyle bir danışmanı kontrol edemediğiniz ve çoklu para birimi kodunu anlamadığınız için ((Popüler bir şekilde açıklayın. Bu koda veya başka bir koda dayanarak, ne nerede, neden ve neden, böylece danışman ticaret yapar). Burada, olayı anlamadan kodu kendiniz keserseniz, çalışırım, ancak uygulamayı asla anlayamayacağım ve yine yardım için mahkemeye çıkmam gerekecek.

extern string Instrument = "EURUSD" ;
extern double Lots = 0.1 ;
extern int    TakeProfit = 50 ;
extern int    TrailingStop = 0 ;
extern int    StopLoss = 50 ;
extern int    FirstOpenLevel = 5 ;
extern int    LastOpenLevel = 20 ;
extern int    Slope = 2 ;
extern int    CloseLevel = 20 ;
 

int start()
{
   double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious;
   int    i, total, p1, p2, p3, p4, p5, p6, p7, p8, p9;
  
   MacdCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 0 );
   MacdPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_MAIN, 1 );
   SignalCurrent= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 0 );
   SignalPrevious= iMACD ( NULL , 0 , 12 , 26 , 9 , PRICE_CLOSE ,MODE_SIGNAL, 1 );
      
   p1= 0 ; p2= 0 ; p3= 0 ; p4= 0 ; p5= 0 ; p6= 0 ; p7= 0 ; p8= 0 ; p9= 0 ;
      
     OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
      
     OrderSelect ( 1 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 2 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 3 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
     
     OrderSelect ( 4 ,SELECT_BY_POS,MODE_TRADES);
     
     if (OrderSymbol()== "EURUSD" ) {p1= 1 ;}
     if (OrderSymbol()== "GBPUSD" ) {p2= 1 ;}
     if (OrderSymbol()== "USDCHF" ) {p3= 1 ;}
     if (OrderSymbol()== "USDJPY" ) {p4= 1 ;}
     if (OrderSymbol()== "EURCHF" ) {p5= 1 ;}
     if (OrderSymbol()== "EURGBP" ) {p6= 1 ;}
     if (OrderSymbol()== "AUDUSD" ) {p7= 1 ;}
     if (OrderSymbol()== "USDCAD" ) {p8= 1 ;}
     if (OrderSymbol()== "EURJPY" ) {p9= 1 ;}
   
   total= OrdersTotal ();
   for (i= 0 ;i<total;i++)
   {
     OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
        
     if (OrderSymbol()==Instrument)
      {
         if (OrderType()==OP_BUY) 
          {
            if (MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent>CloseLevel* 0.1 * Point )
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid, 3 , Violet );
                 return ( 0 );
                }
            if (TrailingStop> 0 )  
              {      
               if (Bid-OrderOpenPrice()> Point *TrailingStop)
                 {
                  if (OrderStopLoss()<Bid- Point *TrailingStop || OrderStopLoss()== 0 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Point *TrailingStop,OrderTakeProfit(), 0 , Green );
                     return ( 0 );
                    }
                 }
              }
           }
          if (OrderType()==OP_SELL)
           {
            if (SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent>CloseLevel* 0.1 * Point )
              {
               OrderClose(OrderTicket(),OrderLots(),Ask, 3 , Violet );
               return ( 0 );
              }
            if (TrailingStop> 0 )  
              {         
               if (OrderOpenPrice()-Ask> Point *TrailingStop)
                 {
                  if (OrderStopLoss()>Ask+ Point *TrailingStop || OrderStopLoss()== 0 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Point *TrailingStop,OrderTakeProfit(), 0 , Red );
                     return ( 0 );
                    }
                 }
              }
           }
        }
     }
   
   total= OrdersTotal ();  
   if (total< 5 )
   {
     if ((Instrument== "EURUSD" && p1< 1 ) || (Instrument== "GBPUSD" && p2< 1 ) || 
        (Instrument== "USDCHF" && p3< 1 ) || (Instrument== "USDJPY" && p4< 1 ) ||
        (Instrument== "EURCHF" && p5< 1 ) || (Instrument== "EURGBP" && p6< 1 ) ||
        (Instrument== "AUDUSD" && p7< 1 ) || (Instrument== "USDCAD" && p8< 1 ) ||
        (Instrument== "EURJPY" && p9< 1 )) 
      {
        if (MacdCurrent< 0 && MacdCurrent-SignalCurrent>SignalCurrent*FirstOpenLevel*(- 0.01 )
           && MacdCurrent-SignalCurrent<SignalCurrent*LastOpenLevel*(- 0.01 )
           && MacdCurrent-MacdPrevious>MacdPrevious*Slope*(- 0.01 )
           && MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent<(CloseLevel- 10 )* 0.1 * Point )  
          {
           OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Ask-StopLoss* Point ,Ask+TakeProfit* Point , "" , 0 , 0 , Green );
           return ( 0 ); 
          }   
      
         if (MacdCurrent> 0 && SignalCurrent-MacdCurrent>SignalCurrent*FirstOpenLevel* 0.01
            && SignalCurrent-MacdCurrent<SignalCurrent*LastOpenLevel* 0.01
            && MacdPrevious-MacdCurrent>MacdPrevious*Slope* 0.01
            && SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent<(CloseLevel- 10 )* 0.1 * Point )
          {
           OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Bid+StopLoss* Point ,Bid-TakeProfit* Point , "" , 0 , 0 , Red );
           return ( 0 ); 
          }
       }
    }
}
 
igrok2008 :

Ve bu oldu.......
Kodda yanlış bir şeyler hissediyorum ama ne olduğunu anlamıyorum ................

Dördüncü gösterge dizisini eklediniz ve kodda hala üç tane var, düzeltilmiş kod aşağıdadır:
 int init(){
//---- indicators
   IndicatorBuffers( 4 );   
   SetIndexStyle( 0 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 0 , 218 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   SetIndexEmptyValue( 0 , 0.0 );   
   SetIndexStyle( 1 , DRAW_ARROW , EMPTY, 1 );
   SetIndexArrow( 1 , 217 );
   SetIndexBuffer ( 1 ,ExtMapBuffer2);
   SetIndexEmptyValue( 1 , 0.0 );   
   SetIndexBuffer ( 2 ,MACD);
   SetIndexBuffer ( 3 ,OsMA);   
//----
}
 
Infinity :
Çoklu para birimi Uzman Danışman kodunu anlamama yardım et, herhangi bir çiftte bir Uzman Danışman çalışması ve ticaretinin açılması gerekiyor.

CodeBase'de çok para birimli bir Uzman Danışman buldum, ancak neyin nerede ve neden olduğunu çözemiyorum.
Test cihazında böyle bir danışmanı kontrol edemediğiniz ve çoklu para birimi kodunu anlamadığınız için ((Popüler bir şekilde açıklayın. Bu koda veya başka bir koda dayanarak, ne nerede, neden ve neden, böylece danışman ticaret yapar). Burada, olayı anlamadan kodu kendiniz keserseniz, çalışırım, ancak uygulamayı asla anlayamayacağım ve yine yardım için mahkemeye çıkmam gerekecek.

Bu kod size uymuyor, çünkü yalnızca bağlı olduğu çift için fırsatlar açıyor, bu satırlardan görülebilir:

 OrderSend ( Symbol () ,OP_BUY,Lots,Ask, 3 ,Ask-StopLoss* Point ,Ask+TakeProfit* Point , "" , 0 , 0 , Green );
OrderSend ( Symbol () ,OP_SELL,Lots,Bid, 3 ,Bid+StopLoss* Point ,Bid-TakeProfit* Point , "" , 0 , 0 , Red );

Symbol () işlevi, geçerli çifti döndürür. Buna göre, diğer döviz çiftlerinde açmak için bu fonksiyon yerine, sadece istenen finansal aracın adını girin.

 
ToLik_SRGV :

Bu kod size uymuyor, çünkü yalnızca bağlı olduğu çift için fırsatlar açıyor, bu satırlardan görülebilir:

Symbol () işlevi, geçerli çifti döndürür. Buna göre, diğer döviz çiftlerinde açmak için bu fonksiyon yerine, sadece istenen finansal aracın adını girin.


Çok kolay değil. Ayrıca Point'i istediğiniz değere değiştirmeniz ve Sormanız gerekir. Evet Teklif de.
 
ToLik_SRGV :

Bu kod size uymuyor, çünkü yalnızca bağlı olduğu çift için fırsatlar açıyor, bu satırlardan görülebilir:

Symbol () işlevi, geçerli çifti döndürür. Buna göre, diğer döviz çiftlerinde açmak için bu fonksiyon yerine, sadece istenen finansal aracın adını girin.


Sadece mesele bu,... danışmanım, tasarım gereği, farklı döviz çiftlerinden sinyaller alıyor, sinyallerle birlikte sinyalin alındığı para biriminin adı geliyor , Symbol() işlevinin sıradaki yeri döviz çiftinin nominal değeri atanan bir değişken. yani, sinyal eurodan geldiyse, EURUSD atanır; ene'den ise USDJPY, ancak uzman dahil tüm sinyalleri görür, ancak yalnızca üzerinde durduğu para birimi için açılır.

İşte yapıyorum örnek kod

 //---- ранее на обработке переменная Symb получает значение валютной пары с которой пришол сигнал
// далее я сравниваю и пытаюсь открыть ордер
 if (Symb == "GBPUSD" ) {val = "GBPUSD" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
 if (Symb == "EURUSD" ) {val = "EURUSD" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
 if (Symb == "USDJPY" ) {val = "USDJPY" ; ticket= OrderSend (val,OP_BUY, 0.1 ,Ask, 3 ,Bid- 20 * Point ,Ask+ 25 * Point , "" , 16384 , 0 , Green );}
Neden: