0
Пробовал разобраться с чужим кодом. Никак. Напишите ТЗ попробую написать с нуля.


//+------------------------------------------------------------------+
//|                                                     Beginner.mq4 |
//|                                                 Copyright © 2007 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, Heaven"
#property link      "http://Beginner.com"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#define  SH_BUY   1
#define  SH_SELL  -1
//---- Входные параметры
extern bool SoundON=true;
extern int     AllBars=0;//Для скольки баров считать. 0 - для всех.
extern int     Otstup=30;//Отступ.
extern double  Per=9;//Период.
//----
int            SH,NB,i,UD;
double         R,SHMax,SHMin;
double         BufD[];
double         BufU[];
int flagval1=0;
int flagval2=0;
//+------------------------------------------------------------------+
//| Функция инициализации                                            |
//+------------------------------------------------------------------+
int init()
  {
   //В NB записываем количество баров для которых считаем индикатор
   if (Bars<AllBars+Per || AllBars==0) NB=Bars-Per; else NB=AllBars;
   IndicatorBuffers(2);
   IndicatorShortName("SHI_SilverTrendSig");
   SetIndexStyle(0,DRAW_ARROW,0,1);
   SetIndexStyle(1,DRAW_ARROW,0,1);
   SetIndexArrow(0,159);
   SetIndexArrow(1,159);
   SetIndexBuffer(0,BufU);
   SetIndexBuffer(1,BufD);
   SetIndexDrawBegin(0,Bars-NB);//Индикатор будет отображаться только для NB баров
   SetIndexDrawBegin(1,Bars-NB);
   ArrayInitialize(BufD,0.0);//Забьём оба буфера ноликами. Иначе будет мусор при смене таймфрейма.
   ArrayInitialize(BufU,0.0);
   return(0);
  }
//+------------------------------------------------------------------+
//| Функция деинициализации                                          |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Собсна индикатор                                                 |
//+------------------------------------------------------------------+
int start()
  {
   int CB=IndicatorCounted();
   i=Bars-CB-1;
 
   /* Тут вот та самая оптимизационная фишка. В язык введена функция, которая возвращает количество
   посчитанных баров, причём очень хитро. При первом вызове индикатора это 0, всё понятно, ещё ничего
   не считалось, а затем выдаёт количество обсчитанных баров минус один. Т.е. если всего баров 100,
   то функция вернёт 99. Я ввёл такой код, выше у меня определялась NB - кол-во баров подлежащих
   обсчёту. В принципе этот параметр можно и выкинуть, однако для тех кто в танке (I80286) можно
   и оставить. Так вот, здесь, при первом вызове NB остаётся прежней, а при последующих уменьшается
   до последнего бара, т.е. 1 или 2, ну или сколько там осталось посчитать*/
   
   
   /*прошу посмотреть индикатор и попробовать его исправить.
   индикатор достаточно точный, но проблемма в том, что он не
   обновляет данные и что бы он работал(находил точки разворота),
   его нужно постоянно вручную обновлять следующим способом: 
   либо заходить в свойства имитируя установку на график,
   либо переключать таймфреймы((
   вот например на М1 или М5 эти манипуляции приходится делать
   чуть ли не каждые две-три минуты*/

   if(CB<0) return(-1); else if(NB>Bars-CB) NB=Bars-CB;
   for(SH=1;SH<NB;SH++)//Прочёсываем график от 1 до NB
     {
      for(R=0,i=SH;i<SH+10;i++)//прочесываем на 10 баров вперед 
      {R+=(10+SH-i)*(High[i]-Low[i]);}//средний размах свечи за 10 баров
            R/=55;//сложили размах за 10 баров и делим на 55
//----
      SHMax=High[Highest(NULL,0,MODE_HIGH,Per,SH)];//хай и лоу за 10 баров
      SHMin=Low[Lowest(NULL,0,MODE_LOW,Per,SH)];
      if (Close[SH]<SHMin+(SHMax-SHMin)*Otstup/100 && UD!=SH_SELL)//если текущее закрытие меньше минимума... т.е. проход цены от лоя
        {
         // Pop an Alert
         if (SH==1 && flagval1==0)
           {
            flagval1=1;//ставим только стрелку под лоем
            flagval2=0;
            if (SoundON) Alert("BUY signal at Ask=",Ask,"\n Bid=",Bid,"\n Time=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());
           }
         BufU[SH]=Low[SH]-R*0.5;//ставим стрелку под лоем
          UD=SH_SELL;
        }
      if (Close[SH]>SHMax-(SHMax-SHMin)*Otstup/100 && UD!=SH_BUY)
        {
         // pop an Alert
         if (SH==1 && flagval2==0)
           {
            flagval2=1;//ставим только стрелку над хаем
            flagval1=0;
            if (SoundON) Alert("SELL signal at Ask=",Ask,"\n Bid=",Bid,"\n Date=",TimeToStr(CurTime(),TIME_DATE)," ",TimeHour(CurTime()),":",TimeMinute(CurTime()),"\n Symbol=",Symbol()," Period=",Period());
           }
         BufD[SH]=High[SH]+R*0.5; UD=SH_BUY;//ставим стрелку над хаем
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 11 мая 2015, 15:33
0
Уточните пожалуйста ТЗ. Более детально опишите входы и выходы. желательно с подробными рисунками.
avatar

AM2

  • 11 мая 2015, 15:24
0
Ставил на демо. При одних настройках выставляет ордера, при других нет. Смотрите внимательно настройки
avatar

AM2

  • 11 мая 2015, 11:45
0
Доработал. Сейчас поставлю на демо.

www.opentraders.ru/downloads/719/



avatar

AM2

  • 11 мая 2015, 11:36
0
Этот код убирает с графика только стрелки, устроит?


//+------------------------------------------------------------------+
//|                                                      Signals.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, AM2"
#property link      "http://www.forexsystems.biz"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//---- input parameters
extern int       barsToProcess=10; //количество баров для расчета
extern int       Dist=10;          //расстояние от поддержки в пунктах
extern int       Pointer=233;      //тип стрелки
extern int       Width=1;          //размер стрелки
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void del()
  {
//--- удаление всех созданных объектов
   int obj_total=ObjectsTotal();
   for(int i=obj_total-1;i>=0;i--)
     {
      string name=ObjectName(i);
      if(ObjectType(name)==OBJ_ARROW)
        {
         ObjectDelete(name);
        }
     }
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,Pointer);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,Pointer);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexEmptyValue(1,0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Comment("");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),limit,i;

   double max=iHigh(Symbol(),0,iHighest(NULL,0,MODE_HIGH,barsToProcess,1));
   double min=iLow(Symbol(),0,iLowest(NULL,0,MODE_LOW,barsToProcess,1));
   int NumMax=iHighest(NULL,0,MODE_HIGH,barsToProcess,1);
   int NumMin=iLowest(NULL,0,MODE_LOW,barsToProcess,1);


   limit=Bars-counted_bars;

   if(limit>barsToProcess)
      limit=barsToProcess;

   for(i=0;i<limit;i++)//буферам которые на экстремумах присваиваются значения, остальные обнуляются
     {
      del();
      if(max>0)
        {
           {
            string name="UP"+TimeToStr(Time[i]);
            ObjectCreate(name,OBJ_ARROW,0,Time[NumMax],min-Dist*Point,0,0);
            ObjectSet(name,OBJPROP_BACK,true);
            ObjectSet(name,OBJPROP_COLOR,indicator_color1);
            ObjectSet(name,OBJPROP_ARROWCODE,Pointer);
            ObjectSet(name,OBJPROP_WIDTH,Width);
           }
        }
      if(min>0)
        {
           {
            name="DN"+TimeToStr(Time[i]);
            ObjectCreate(name,OBJ_ARROW,0,Time[NumMin],min-Dist*Point,0,0);
            ObjectSet(name,OBJPROP_BACK,true);
            ObjectSet(name,OBJPROP_COLOR,indicator_color2);
            ObjectSet(name,OBJPROP_ARROWCODE,Pointer);
            ObjectSet(name,OBJPROP_WIDTH,Width);
           }
        }
     }

   Comment("\n  max ",max,
           "\n  min ",min);
   return(0);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 11 мая 2015, 09:16
0
Да я сейчас этим занимаюсь и буду отлаживать на демо
avatar

AM2

  • 11 мая 2015, 09:12
0
zakaz.opentraders.ru/download.php?file=084541307d

Ошибка: 404
К сожалению, такой страницы не существует, либо у Вас недостаточно прав доступа для ее просмотра.
avatar

AM2

  • 11 мая 2015, 07:46
0
Завтра начну делать
avatar

AM2

  • 10 мая 2015, 10:06
0
С началом торгов смогу отладить.
avatar

AM2

  • 10 мая 2015, 08:58
0
Сейчас буду смотреть
avatar

AM2

  • 10 мая 2015, 08:34
0
Я прописал индикатор в советник:
www.opentraders.ru/downloads/717/



Но в этой основе нет того что вам нужно:

в советнике необходим мартин (но который можно будет вкл\выкл) и который
должен работать так:
при закрытии ордера по стоп-лоссу, к следующему ордеру прибавляется
лот равный некому значению, напр: КЛот =00.00 (выведеному и настраеваемому в параметрах).
пример: сработал сл, то след ордер лот+КЛот, если сразу же опять стоп,
то следующий лот+КЛот+КЛот и тд., то есть советник далее продолжает увеличивать лот,
только в случае следующих подряд(!) стоп-лоссов,
а после получения тпрофита возвращается в обычный режим.


и независимо закрыты ли предыдущие ордера, через «nn» пипсов
(это должно настраиваться в параметрах).



Можете сами убедиться, посмотрев внимательно настройки.

Нужно писать заново или на другой основе.
avatar

AM2

  • 9 мая 2015, 15:03
+1
Больше года нормально шел с начала 14-го а потом замотало *loss* 

avatar

AM2

  • 9 мая 2015, 13:18
+1
Сделал пораньше. Постоянным клиентам скидка! :D 

Файл в базе: www.opentraders.ru/downloads/716/

avatar

AM2

  • 9 мая 2015, 12:53
0
В понедельник посмотрю что можно сделать
avatar

AM2

  • 9 мая 2015, 10:07
+2
Какой эгоист однако индикатор! Поправлю чтобы за собой только убирал :) 
avatar

AM2

  • 8 мая 2015, 19:51
0
Сейчас друг за другом ходят практически идентично: www.opentraders.ru/downloads/711/

avatar

AM2

  • 8 мая 2015, 15:44