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

 

Teşekkürler ama hatanın nerede olduğunu çözemedim...

 //+----------------------------------------------------------+

int start()
{
   int   counted_bars=IndicatorCounted();
   int   i,limit;

   if (counted_bars < 0 ) return (- 1 );
   if (counted_bars > 0 ) counted_bars--;
           limit = Bars -counted_bars;

   //
   
   for (i=limit; i>= 0 ; i--)
   {  
      Prices[i] = iMA ( NULL , 0 , 1 , 0 , MODE_SMA ,PriceType,i);
            
         double MaxH = Prices[ ArrayMaximum (Prices,period,i)];
         double MinL = Prices[ ArrayMinimum (Prices,period,i)];
         if (MaxH!=MinL)
               Values[i] = 0.33 * 2 *((Prices[i]-MinL)/(MaxH-MinL)- 0.5 )+ 0.67 *Values[i+ 1 ];
         else   Values[i] = 0.00 ;
               Values[i] = MathMin ( MathMax (Values[i],- 0.999 ), 0.999 ); 
               buffer5[i] = 0.5 * MathLog (( 1 +Values[i])/( 1 -Values[i]))+ 0.5 *buffer5[i+ 1 ];

         if (buffer5[i]==buffer5[i+ 1 ])
            {
               buffer1[i]=buffer1[i+ 1 ];
               buffer2[i]=buffer2[i+ 1 ];
               buffer3[i]=buffer3[i+ 1 ];
               buffer4[i]=buffer4[i+ 1 ];
               continue ;
            }
      
            buffer1[i]= EMPTY_VALUE ;
            buffer2[i]= EMPTY_VALUE ;
            buffer3[i]= EMPTY_VALUE ;
            buffer4[i]= EMPTY_VALUE ;
             if (buffer5[i]< 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer3[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer4[i]=buffer5[i];
               }
             if (buffer5[i]> 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer2[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer1[i]=buffer5[i];
               }
   }
   return ( 0 );
}
 

İyi insanlar, lütfen söyleyin, TrailingStop'u uygulamak için bir KOD'a ihtiyacım var!?

İnternette bulduğum çalışmıyor (ileri geri sürün)

 
void TrailPositions()
{
   int Orders = OrdersTotal ();
   for ( int i= 0 ; i<Orders; i++)
  {
     if (!( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))) continue ;
     if (OrderSymbol() != Symbol ()) continue ;
    {    
       if (OrderType() == OP_BUY)  
      {
         if (Bid-OrderOpenPrice() > MinProfit* Point ) 
        {
           if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep- 1 )* Point ) 
          {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop* Point ,OrderTakeProfit(), 0 , 0 );
             if (UseSound == true)
            {
             PlaySound (SuccesSound);
            }           
          }
        }
      }   
       if (OrderType() == OP_SELL)  
      {
         if (OrderOpenPrice()-Ask > MinProfit* Point ) 
        {
           if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep- 1 )* Point ) 
          {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop* Point ,OrderTakeProfit(), 0 , 0 );
             if (UseSound == true)
            {
             PlaySound (SuccesSound);
            }           
          }
        }
      }   
    }   
  }  
}
//+------------------------------------------------------------------+
sergeyka2003 :

İyi insanlar, lütfen söyleyin, TrailingStop'u uygulamak için bir KOD'a ihtiyacım var!?

İnternette bulduğum çalışmıyor (ileri geri sürün)

 
rustein :

Teşekkürler ama hatanın nerede olduğunu çözemedim...


tam göstergeye ihtiyaç var
 
Vinin :

tam göstergeye ihtiyaç var

Teşekkür ederim

 #property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Green
#property  indicator_color2  Red
#property  indicator_color3  Red
#property  indicator_color4  Green
#property  indicator_color5  DimGray
#property  indicator_width1   2
#property  indicator_width3   2
#property  indicator_width5   0

//
 
extern int   period = 21 ;
int   PriceType = PRICE_MEDIAN ;

double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];
double buffer5[];
double Prices[];
double Values[];

//+----------------------------------------------------------+

int init()
{
   IndicatorBuffers( 7 );
       SetIndexBuffer ( 0 ,buffer1); SetIndexStyle( 0 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 1 ,buffer2); SetIndexStyle( 1 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 2 ,buffer3); SetIndexStyle( 2 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 3 ,buffer4); SetIndexStyle( 3 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 4 ,buffer5);
       SetIndexBuffer ( 5 ,Prices);
       SetIndexBuffer ( 6 ,Values);
   IndicatorShortName( "Fisher (" +period+ ")" );
   return ( 0 );
}

//+----------------------------------------------------------+

int start()
{
   int   counted_bars=IndicatorCounted();
   int   i,limit;

   if (counted_bars < 0 ) return (- 1 );
   if (counted_bars > 0 ) counted_bars--;
           limit = Bars -counted_bars;

   //
   
   for (i=limit; i>= 0 ; i--)
   {  
      Prices[i] = iMA ( NULL , 0 , 1 , 0 , MODE_SMA ,PriceType,i);
            
         double MaxH = Prices[ ArrayMaximum (Prices,period,i)];
         double MinL = Prices[ ArrayMinimum (Prices,period,i)];
         if (MaxH!=MinL)
               Values[i] = 0.33 * 2 *((Prices[i]-MinL)/(MaxH-MinL)- 0.5 )+ 0.67 *Values[i+ 1 ];
         else   Values[i] = 0.00 ;
               Values[i] = MathMin ( MathMax (Values[i],- 0.999 ), 0.999 ); 
               buffer5[i] = 0.5 * MathLog (( 1 +Values[i])/( 1 -Values[i]))+ 0.5 *buffer5[i+ 1 ];

         if (buffer5[i]==buffer5[i+ 1 ])
            {
               buffer1[i]=buffer1[i+ 1 ];
               buffer2[i]=buffer2[i+ 1 ];
               buffer3[i]=buffer3[i+ 1 ];
               buffer4[i]=buffer4[i+ 1 ];
               continue ;
            }
      
            buffer1[i]= EMPTY_VALUE ;
            buffer2[i]= EMPTY_VALUE ;
            buffer3[i]= EMPTY_VALUE ;
            buffer4[i]= EMPTY_VALUE ;
             if (buffer5[i]< 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer3[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer4[i]=buffer5[i];
               }
             if (buffer5[i]> 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer2[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer1[i]=buffer5[i];
               }
   }
   return ( 0 );
}
 

İlk başlangıçta, ArrayMaximum ve ArrayMinimum işlev dizisinde bir taşma oldu

 #property  indicator_separate_window
#property  indicator_buffers 5
#property  indicator_color1  Green
#property  indicator_color2  Red
#property  indicator_color3  Red
#property  indicator_color4  Green
#property  indicator_color5  DimGray
#property  indicator_width1   2
#property  indicator_width3   2
#property  indicator_width5   0

//

extern int   period = 21 ;
int   PriceType = PRICE_MEDIAN ;

double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];
double buffer5[];
double Prices[];
double Values[];

//+----------------------------------------------------------+

int init()
{
   IndicatorBuffers( 7 );
       SetIndexBuffer ( 0 ,buffer1); SetIndexStyle( 0 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 1 ,buffer2); SetIndexStyle( 1 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 2 ,buffer3); SetIndexStyle( 2 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 3 ,buffer4); SetIndexStyle( 3 , DRAW_HISTOGRAM );
       SetIndexBuffer ( 4 ,buffer5);
       SetIndexBuffer ( 5 ,Prices);
       SetIndexBuffer ( 6 ,Values);
   IndicatorShortName( "Fisher (" +period+ ")" );
   return ( 0 );
}

//+----------------------------------------------------------+

int start()
{
   int   counted_bars=IndicatorCounted();
   int   i,limit= Bars -counted_bars;

   if (limit > 1 ) 
      limit = Bars -period- 1 ;


   
   for (i=limit; i>= 0 ; i--)
   {  
      Prices[i] = iMA ( NULL , 0 , 1 , 0 , MODE_SMA ,PriceType,i);
            
         double MaxH = Prices[ ArrayMaximum (Prices,period,i)];
         double MinL = Prices[ ArrayMinimum (Prices,period,i)];
         if (MaxH!=MinL)
               Values[i] = 0.33 * 2 *((Prices[i]-MinL)/(MaxH-MinL)- 0.5 )+ 0.67 *Values[i+ 1 ];
         else   Values[i] = 0.00 ;
               Values[i] = MathMin ( MathMax (Values[i],- 0.999 ), 0.999 ); 
               buffer5[i] = 0.5 * MathLog (( 1 +Values[i])/( 1 -Values[i]))+ 0.5 *buffer5[i+ 1 ];

         if (buffer5[i]==buffer5[i+ 1 ])
            {
               buffer1[i]=buffer1[i+ 1 ];
               buffer2[i]=buffer2[i+ 1 ];
               buffer3[i]=buffer3[i+ 1 ];
               buffer4[i]=buffer4[i+ 1 ];
               continue ;
            }
      
            buffer1[i]= EMPTY_VALUE ;
            buffer2[i]= EMPTY_VALUE ;
            buffer3[i]= EMPTY_VALUE ;
            buffer4[i]= EMPTY_VALUE ;
             if (buffer5[i]< 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer3[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer4[i]=buffer5[i];
               }
             if (buffer5[i]> 0 )
               {
                   if (buffer5[i]<buffer5[i+ 1 ]) buffer2[i]=buffer5[i];
                   if (buffer5[i]>buffer5[i+ 1 ]) buffer1[i]=buffer5[i];
               }
   }
   return ( 0 );
}
 
Vinin :

İlk başlangıçta, ArrayMaximum ve ArrayMinimum işlevlerinden oluşan bir dizi taşma oldu.

Teşekkürler !!!
 

Basit bir darbe uygulamaya çalışıyorum. Durma konumuna ulaşıldığında --> tersini açın. Bunu, tam tersinin bir kez açılması ve başka hiçbir şeyin açılmaması için yapmak imkansızdır. Lütfen söyle.

 

Bunu aşağıdaki gibi uyguladım - bu koşul, bir önceki pozisyonu zararda kapatırken, ardından karşı pozisyonu açarken ... .kimiv.ru/ bir emrin kapanmasını kesin olarak zararı durdur ile belirleyen bir fonksiyon var. Yani bu fonksiyonu bağlayarak stoploss'a ulaşıldığında pozisyonun kapanıp kapanmadığını, evet ise tersini açmanın koşulunu belirtirsiniz...

Not: Stoploss ile pozisyon kapatma fonksiyonunun bu kodunun birkaç sayfa önce bu başlıkta sunulduğunu hatırladım... Bak.

 //---Поиск последнего отработавшего ордера для открытия очередной позиции ---
   
   for (orderIndex = (OrdersHistoryTotal() - 1 ); orderIndex >= 0 ; orderIndex--)
   {   
      if (! OrderSelect (orderIndex, SELECT_BY_POS, MODE_HISTORY))
      {
         Print ( "Ошибка при доступе к исторической базе (" , GetLastError (), ")" );
         continue ;
      }
   
      if ((OrderSymbol() != Symbol ()) || (OrderMagicNumber() != MagicNumber))
      {
         continue ;
      }
      
        
   //-------------------------Принимаем в расчет только ордер, закрытый недавно-----------------------
         
      if (OrderCloseTime() >= iTime( NULL , 0 , 1 ))
      {
         int lastType = OrderType();
         double lastLots = OrderLots();
         double lastProfit = OrderProfit() + OrderSwap();
         
        // Print ("lastProfit = ", NormalizeDouble(lastProfit, 1));
         
       
         
         // Анализ только что закрывшегося ордера
      
         if (lastProfit < 0.0 )
         {
  //---Ордер закрылся с убытком открываемся в ОБРАТНОМ направлении
                           
           
 // ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...            
    
  // -----если предыдущий ордер был бай, то открываем очередной ордер   
            lots = NormalizeLots(lots);
            if (lastType == OP_SELL)  OrderSend ( Symbol (), OP_BUY, lots,...);
                          
            if (lastType == OP_BUY)   OrderSend ( Symbol (), OP_SELL, lots, ...);
          }           
        
         
         return ( 0 );
       }
      
      // Найден закрытый ордер, но он старый
      
      break ;
   }
 
001 :

Basit bir darbe uygulamaya çalışıyorum. Durma konumuna ulaşıldığında --> tersini açın. Bunu, tam tersinin bir kez açılması ve başka hiçbir şeyin açılmaması için yapmak imkansızdır. Lütfen söyle.

Ve durma seviyesinde bekleyen bir emir verirseniz? Yani sığmaz mı?