Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 322

 

Подскажите как сделать, чтобы индикатор выводил не текущее,а максимальное значение последних Per баров, сделал на примере осмы, но он показывает ток в тестере кода график движется, а когда просто кидаешь на график то ничего:

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Silver
#property  indicator_width1  2
//---- indicator parameters

extern int Per=12;
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     OsmaBuffer1[];
double     OsmaBuffer[];
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 2 additional buffers are used for counting.
   IndicatorBuffers(4);
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexDrawBegin(0,SignalSMA);
   IndicatorDigits(Digits+2);
//---- 3 indicator buffers mapping
   SetIndexBuffer(0,OsmaBuffer1);
   SetIndexBuffer(1,OsmaBuffer);
   SetIndexBuffer(2,MacdBuffer);
   SetIndexBuffer(3,SignalBuffer);
   
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("OsMA("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Average of Oscillator                                     |
//+------------------------------------------------------------------+
int start()
  {
   
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd additional buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- main loop
   for(i=0; i<limit; i++)
      OsmaBuffer[i]=MacdBuffer[i]-SignalBuffer[i];
//---- done
   for(i=0; i<limit; i++)
    {
     for(int b=0; b<Per; b++)
      {
       OsmaBuffer1[i] =OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,b)];
      }
    } 
  return(0);
  }
Всё разобрался, перемудрил просто))), достаточно этого:
for(i=0; i<limit; i++)
    {
     OsmaBuffer1[i] = OsmaBuffer[ ArrayMaximum(OsmaBuffer,Per,i)];
    } 
 
borilunad:
Это я понимаю! Но как запрограммировать эту переменную("заданный спрэд")?! Конечно, я могу сделать переменную Spread и каждый раз менять её, когда меняю в тестере спрэд. Скажем, Spread(TestGenerator) или есть какая-то функция, или можно как-то сделать такую функцию, не может быть, что нельзя! А?


Есть заданный спрэд, при тестирование,

но у большинства ДЦ он переменный. Есть желание, в тестере учтите это как нибудь. А вообще тестируйте советники на максимально неблагоприятных условиях. Т.е с максимальным спрэдом, с возможными задержками открытия ордеров и т.д.

 
Sepulca:


Есть заданный спрэд, при тестирование,

но у большинства ДЦ он переменный. Есть желание, в тестере учтите это как нибудь. А вообще тестируйте советники на максимально неблагоприятных условиях. Т.е с максимальным спрэдом, с возможными задержками открытия ордеров и т.д.

Да я понимаю и делаю всё! Только хотел, чтобы в проге отразить устанавливаемый мною спрэд, поскольку в тестере Аск часто искажён, то находить его через Bid+spread! Смотрите ветку Не работает MarketInfo в тестере.! Тогда поймёте, в чём дело! Там спросил, и молчок! Потому перенёс сюда, тут откликаются, за что вам и другим спасибо!
 
Коллеги! прошу помочь впихнуть в советник готовую функцию
 

Вот функция

bool isFlagHistoryPos(int mn=-1) {

datetime t;

int gd = MarketInfo(Symbol(),MODE_DIGITS);

int i, j=-1, k=OrdersHistoryTotal();

for (i=0; i<k; i++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (OrderSymbol()==Symbol()) {

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {

if (mn<0 || OrderMagicNumber()==mn) {

if (t<OrderCloseTime()) {

t=OrderCloseTime();

j=i;

}

}

}

}

}

}

if(OrderSelect(j, SELECT_BY_POS,MODE_HISTORY)) {

double ocp=NormalizeDouble(OrderClosePrice(),gd);

double otp=NormalizeDouble(OrderTakeProfit(),gd);

if(MathAbs(ocp-otp)/Point<=TPpoint) return(true);

}

return(false);

Сам советник во вложении

/* Декомпил удален Vinin */

 
borilunad:
Да я понимаю и делаю всё! Только хотел, чтобы в проге отразить устанавливаемый мною спрэд, поскольку в тестере Аск часто искажён, то находить его через Bid+spread! Смотрите ветку Не работает MarketInfo в тестере.! Тогда поймёте, в чём дело! Там спросил, и молчок! Потому перенёс сюда, тут откликаются, за что вам и другим спасибо!

Блин, Борис. Я ж уже писал недавно. Ну сделай имитацию плавающего спреда прямо в советнике. Что мешает к биду прибавлять случайное число в диапазоне плавающего спреда и открываться отложками стоповыми. И закрывай по значению, а не по стоп-приказам. Сложнее, чем просто задать статичный спред побольше, но если сильно нужно - можно изобразить. При этом в тестере спред минимальный поставь.

Это так... направление мысли.

 
artmedia70:

Блин, Борис. Я ж уже писал недавно. Ну сделай имитацию плавающего спреда прямо в советнике. Что мешает к биду прибавлять случайное число в диапазоне плавающего спреда и открываться отложками стоповыми. И закрывай по значению, а не по стоп-приказам. Сложнее, чем просто задать статичный спред побольше, но если сильно нужно - можно изобразить. При этом в тестере спред минимальный поставь.

Это так... направление мысли.

Спасибо, Артём! Это мудрее в хорошем смысле слова! Так и сделаю!
 

Помогите с проблемой,пожалуйста)Я написал советник,работающий по пересечению машек,но когда пытаюсь протестить его,то терминал издает звук гудка и ничего не тестит(Компилятору код нравится.Как сделать так чтобы он хоть что то показывал?

#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"


#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- indicator parameters
extern int RPeriod=13;
extern int RPrice=PRICE_CLOSE;
extern int RMethod=MODE_EMA;
//для желтой
extern int YPeriod=30;
extern int YPrice=PRICE_CLOSE;
extern int YMethod=MODE_EMA;
extern int Magic=17051994;
//профит и лось
extern int TakeProfit=150;
extern int StopLoss=30;
extern double lot=0.1;
double movingred,movingellow,SL,TP,movingred2,movingellow2;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int kolpos=0,pos;  
     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
         
        for(pos=0;pos <OrdersTotal();pos++)//считаю ордера чтобы советник не трогал в ручную выставленные ордера
        {
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic )
            {
            kolpos++;
            }
        }
        if (kolpos==0)
         {
              //условвие для покупок продаж
              if(movingred2>movingellow2 && movingred<movingellow && Volume[0]<5)//продаем 
                  {
                    OrderSend(Symbol(),OP_SELL,lot,Bid,10,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,Magic,0,Green);
                  }
              if(movingred2<movingellow2 && movingred>movingellow && Volume[0]<5)//покупаем
                  {
                    OrderSend(Symbol(),OP_BUY,lot,Ask,10,Ask-StopLoss*Point,Ask-TakeProfit*Point,NULL,Magic,0,Red);
                  }
          }
   return(0);
  }
 
LBatters:

Помогите с проблемой,пожалуйста)Я написал советник,работающий по пересечению машек,но когда пытаюсь протестить его,то терминал издает звук гудка и ничего не тестит(Компилятору код нравится.Как сделать так чтобы он хоть что то показывал?

Вы когда-нибудь смотрите то, что написали?!

Что-то мне подсказывает, что "здесь собака порылась":

     movingred=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingellow=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,1);
     movingred2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
     movingellow2=iMA(Symbol(),0,RPeriod,0,RMethod,RPrice,2);
 
LBatters:

Помогите с проблемой,пожалуйста)Я написал советник,работающий по пересечению машек,но когда пытаюсь протестить его,то терминал издает звук гудка и ничего не тестит(Компилятору код нравится.Как сделать так чтобы он хоть что то показывал?

//считаю ордера чтобы советник не трогал в ручную выставленные ордера

А хде он их трогать будет-та??? Да и достаточно магик проверять, ручные без магика.


Ну и, как выше уже написали, машки не пересекаются...