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

 
SL ile danışman aynı türden bir sipariş açmalıdır ve TP ile tam tersi!
Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!



 //+------------------------------------------------------------------+
//|                                                      Kogalym.mq4 |
//|                                                               TO |
//|                             http://forex-tradexperts-to.narod.ru |
//+------------------------------------------------------------------+
#property copyright "TO"
#property link      "http://forex-tradexperts-to.narod.ru"

//--------------------------------------------------------------------
extern int  stoploss    = 50 ,
            takeprofit  = 50 ;
extern double      Lot= 1 ;
extern double Martin_Koef = 1.6 ;
//--------------------------------------------------------------------
int init()
{
   OrderSend ( Symbol (),OP_SELL,Lot,Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
                        NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );
}
//--------------------------------------------------------------------
int start()
{   for ( int i= 0 ; i< OrdersTotal (); i++){   
      if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)==true){
         if (OrderSymbol()== Symbol ()){
         Lot = OrderLots(); return ;}}}
            if (Lot== 0 ) return ;
       
  if (OrderType() == OP_SELL)
   if (OrderProfit()> 0 ) OrderSend ( Symbol (),OP_BUY , getLot(),Ask, 3 , NormalizeDouble (Bid - stoploss* Point , Digits ),
                                    NormalizeDouble (Ask + takeprofit* Point , Digits ), " " , 777 , Blue ); 
 else  OrderSend ( Symbol (),OP_SELL,getLot(),Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
                                   NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );

  if (OrderType() == OP_BUY) 
   if (OrderProfit()> 0 ) OrderSend ( Symbol (),OP_SELL,getLot(),Bid, 3 , NormalizeDouble (Ask + stoploss* Point , Digits ),
        NormalizeDouble (Bid - takeprofit* Point , Digits ), " " , 777 , Blue );
else  OrderSend ( Symbol (),OP_BUY ,getLot(),Ask, 3 , NormalizeDouble (Bid - stoploss* Point , Digits ),
                                    NormalizeDouble (Ask + takeprofit* Point , Digits ), " " , 777 , Blue );
  
                                     
       
   return ( 0 );
}
//-----------------------------------------------------------------

double getLot()
{
   if (OrdersHistoryTotal()== 0 ) return ( 1 );
   // ищем самый последний закрытый ордер
   datetime time= 0 ;
   int i;
   int ticket=- 1 ;
   for (i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--)
   {
      if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol()== Symbol ())
         {
            if (OrderCloseTime()>time)
            {
               time=OrderCloseTime();
               ticket=OrderTicket();
            }
         }
      }
   }
   if (OrderTicket()!=ticket) OrderSelect (ticket,SELECT_BY_TICKET);
   if (OrderProfit()<= 0 ) return ( NormalizeDouble (OrderLots()*Martin_Koef, 2 ));
   if (OrderProfit()> 0 ) return ( 1 );
   //-----
}
Söyle hata nerede???
 
Kogalym писал(а) >>
SL ile danışman aynı türden bir sipariş açmalıdır ve TP ile tam tersi!
Ancak bazı nedenlerden dolayı danışman genellikle yanlış türde bir sipariş açar!



Söyle hata nerede???

 if (OrderType() == OP_SELL)
   if (OrderProfit()> 0 )
Bu seçim gerektirir.
 
Bu göstergenin bir danışman için uygun olduğunu kim bilebilir, yazar tarafından kullanıldığı bir strateji buldum veya bir danışmana kaydedebilir ve nasıl yapılacağını, örneğin örnek olarak gösterebilirsiniz. Histogram yeşilse ve çizgi histogramın altındaysa sinyal al? Hücreler için durum aynıdır.
 
PapaYozh >> :


x10 dizisinin boyutu nedir?

on?
O zaman şu şekilde yeniden yazmanız gerekir:

ve MAX ve MIN dizilerinde tam olarak ne almak istediğiniz belli değil

tekrar anlatayım :)

MACD sütunlarının tüm değerlerini içeren bir dizi vardır.

Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.

İşte kod tekrar:

 for (i= 0 ; i< 50 ; i=i+ 10 ) //общий цикл для всех значений МАКД, шаг 10
       {
         int k = i;
         for (k=i; k<i+ 10 ; k++) // цикл внутри десятки значений, шаг 1
             {       
              x10[k] = MACD[k]; // массив десяток
             }
         int IndexMAX = ArrayMaximum (x10); // найден индекс максимального значения внутри десятки 
         int IndexMIN = ArrayMinimum (x10); // --//--   
         MAX[k] = MACD[IndexMAX]; // Рисуем найденное максимальное значение внутри десятки на k баре
         MIN[k] = MACD[IndexMIN];
       }

Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.

Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...

 
Noterday писал(а) >>

tekrar anlatayım :)

MACD sütunlarının tüm değerlerini içeren bir dizi vardır.

Tüm bu değerlerden (sırasıyla) on değer almak ve içlerinde maksimumu aramak ve buna göre bir hindi çizmek ve sonuna kadar böyle devam etmek gerekir.

İşte kod tekrar:

Anladığım kadarıyla onlu dizi indeksim MACD değerleri ile ana dizide bu değerin indeksi ile eşleşmediği için çizilmiyor.

Onlar. ana döngüdeki sayaç 30'a ulaştığında, diyelim ki, 30, sonra 30-31-32...39 iç içe döngüye girecek (diyelim ki bunların maksimum değeri 34), Arraymaximum(x10) işlevi bulacak ancak SİZİN (x10) dizinizdeki IndexMAX'a tam olarak sıra numarasını yazın, yani. aslında, 34 değeri doğru olacak ve başka bir değer yazacaktır (0'dan 9'a, çünkü bu bir onlarca dizisidir). ne yapacağımı düşünemiyorum...


Göstergenin tüm kodunu göster
 
Vinin >> :


Göstergenin tüm kodunu göster
 //+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                                        Alexander |
//+------------------------------------------------------------------+
#property  copyright "none"
#property  link       "none"
//---- indicator settings
#property  indicator_separate_window
#property indicator_buffers 4

#property indicator_color1 MediumPurple
#property indicator_color2 MediumPurple
#property indicator_color3 Green
#property indicator_color4 Red

#property indicator_width1 1
#property indicator_width2 1

//---- indicator parameters
extern int FastEMA= 12 ;
extern int SlowEMA= 26 ;
extern int SignalSMA= 9 ;
//---- indicator buffers
double      MACD[];
double      SMACD[];
double      MAX[];
double      MIN[];
double      x10[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers( 5 );
   
   SetIndexBuffer ( 0 ,MACD);
   SetIndexBuffer ( 1 ,SMACD);
   SetIndexBuffer ( 2 ,MAX);
   SetIndexBuffer ( 3 ,MIN);
   SetIndexBuffer ( 4 ,x10);
   
   SetIndexStyle( 0 , DRAW_HISTOGRAM );
   SetIndexStyle( 1 , DRAW_LINE );
   
   SetIndexStyle( 2 , DRAW_ARROW );
   SetIndexArrow( 2 , 119 );
   
   SetIndexStyle( 3 , DRAW_ARROW );
   SetIndexArrow( 3 , 119 );
   
   SetIndexStyle( 4 , DRAW_NONE );
   
   SetIndexDrawBegin( 1 ,SMACD);
   IndicatorDigits( Digits + 2 );

   IndicatorShortName( "MACD(" +FastEMA+ "," +SlowEMA+ "," +SignalSMA+ ")" );
   SetIndexLabel( 0 , "MACD" );
   SetIndexLabel( 1 , "Signal" );

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();

   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

   for ( int i= 0 ; i<limit; i++)
      MACD[i]= iMA ( NULL , 0 ,FastEMA, 0 , MODE_EMA , PRICE_CLOSE ,i)- iMA ( NULL , 0 ,SlowEMA, 0 , MODE_EMA , PRICE_CLOSE ,i);

   for (i= 0 ; i<limit; i++)
      SMACD[i]=iMAOnArray(MACD, Bars ,SignalSMA, 0 , MODE_SMA ,i);
      
      
   for (i= 0 ; i<limit; i=i+ 10 )
       {
         int k = i;
         for (k=i; k<i+ 10 ; k++)
             {       
              x10[k] = MACD[k]; // массив десяток
             }
         int IndexMAX = ArrayMaximum (x10);
         int IndexMIN = ArrayMinimum (x10);    
         MAX[k] = MACD[IndexMAX];
         MIN[k] = MACD[IndexMIN];
       }
   return ( 0 );
  }
//+------------------------------------------------------------------+

int deinit()
{   
return ( 0 );
}
 
Noterday писал(а) >>

tekrar anlatayım :)

Sanırım şöyle yazmak istedin:

 for (i= 0 ; i<limit; i+= 10 ) //общий цикл для всех значений МАКД, шаг 10
       {
         int k;
         for (k=0; k< 10 ; k++) // цикл внутри десятки значений, шаг 1
             {       
              x10[k] = MACD[i+k]; // массив десяток
             }
         int IndexMAX = ArrayMaximum (x10); // найден индекс максимального значения внутри десятки 
         int IndexMIN = ArrayMinimum (x10); // --//--   
         MAX[k] = x10[IndexMAX]; // Рисуем найденное максимальное значение внутри десятки на k баре
         MIN[k] = x10[IndexMIN];
       }
 
Noterday писал(а) >>


Ve hedefin nedir?
Peki, ne almak istiyorsun. Düzinelerce bölmek anlamsızdır. Sürekli zaman içinde hareket ederler.

 
PapaYozh >> :

Sanırım şöyle yazmak istedin:

çizemiyorum :((

ps k=0 ekledim :)

 
Vinin >> :


Ve hedefin nedir?
Peki, ne almak istiyorsun. Düzinelerce bölmek anlamsızdır. Sürekli zaman içinde hareket ederler.

Evet, amaç gerçek... Her 10 çubuk arasında maksimumu göstermek istiyorum...