0
Сегодня займусь
avatar

AM2

  • 13 мая 2015, 07:37
0
советник не учитывает ордера открытые вручную. насчет вашего варианта у меня есть свой.
avatar

AM2

  • 13 мая 2015, 07:25
0
завтра посмотрю код и скажу. а сейчас
avatar

AM2

  • 12 мая 2015, 22:30
0
индикатор
avatar

AM2

  • 12 мая 2015, 22:23
0
ну вот эта часть же необязательной была?

В нашем деле все пригодится! :)  Собрал все в кучу, завтра поправлю ошибки и добавлю стопы
avatar

AM2

  • 12 мая 2015, 22:15
0
Продолжаем делать то что есть или п.3. дорабатываем? По остальным пунктам есть функции готовые.
avatar

AM2

  • 12 мая 2015, 21:59
0
Отложенные ордера по трендовым линиям

Trend_Line_Pending_Orders — бесплатный советник для MetaTrader 4, выставляет отложенные ордера по трендовым линиям. Сразу возможно установить 4 типа ордеров и стопы для них.



Описание работы:

Бросаем советник на график и появляются трендовые линии, их можно ставить куда угодно и под каким угодно углом, при этом советник будет вести отложенные стоп и лимит ордера по своим линиям. Если линию удаляем, то ордер тоже удаляется, если правый край линии имеет время меньше текущего, то тоже ордер удаляется.

При запуске, в настройках можно установить размер лота, уровни Stoploss и Takeprofit, а также выбрать тип отложенных ордеров.



Работу советника можно проверить в тестере. Запускаем с визуализацией на небольшой скорости, для того чтобы во время работы тестеры успевать передвигать трендовые линии.

Настройки:

extern bool StopOrders = false; //выставлять стоп ордера
extern bool LimitOrders = true; //выставлять лимит ордера
extern double PriceSellStop = 0; //если 0, то начальная линия ставится на минимум прошлого дня
extern double PriceBuyStop = 0; //если 0, то начальная линия ставится на максимум прошлого дня
extern double PriceSellLimit = 0; //если 0, то начальная линия ставится на максимум прошлого дня
extern double PriceBuyLimit = 0; //если 0, то начальная линия ставится на минимум прошлого дня
extern int Stoploss = 0, //стоплосс ордеров
Takeprofit = 0; //тейкпрофит ордеров
extern double Lot = 0.1; //
extern int Magic = 100; //уникальный номер ордеров этого советника
extern int FontSize = 8; //размер шрифта
extern color ColorText = Lime;


Скачать
avatar

AM2

  • 12 мая 2015, 21:53
0
Есть все пункты, только без трала: www.opentraders.ru/downloads/722/

avatar

AM2

  • 12 мая 2015, 16:59
0
Начал делать
avatar

AM2

  • 12 мая 2015, 15:50
0
Напишите подробное ТЗ в Стол заказов MQL желательно с рисунками и сделаю
avatar

AM2

  • 12 мая 2015, 15:49
0
Максимально упростил логику индикатора. Смотрите что не так, показывайте на скринах, я буду править.




//+------------------------------------------------------------------+
//|                                                        Begin.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 эти манипуляции приходится делать
   чуть ли не каждые две-три минуты*/

   for(i=1;i<=CB;i++)//Прочёсываем график от 1 до NB
     {
      int k=0;
      SHMax=High[Highest(NULL,0,MODE_HIGH,Per,i)];//хай и лоу за 10 баров
      SHMin=Low[Lowest(NULL,0,MODE_LOW,Per,i)];
      if (Close[i]<SHMin+Otstup*Point && UD!=SH_SELL)//если текущее закрытие меньше минимума... т.е. проход цены от лоя
        {
         // Pop an Alert
         if (k==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[i]=Low[i]-Otstup*Point;//ставим стрелку под лоем
          UD=SH_SELL;
        }
      if (Close[i]>SHMax-Otstup*Point && UD!=SH_BUY)
        {
         // pop an Alert
         if (k==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[i]=High[i]+Otstup*Point; UD=SH_BUY;//ставим стрелку над хаем
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 12 мая 2015, 13:43
0
Сделал все 3 пункта. Посмотрите: www.opentraders.ru/downloads/721/

avatar

AM2

  • 12 мая 2015, 10:34
+1
Добавил продажи, БУ, трал, вывод на экран ценовой метки при запуске советника: www.opentraders.ru/downloads/720/

avatar

AM2

  • 12 мая 2015, 07:38
0
как я понял индикатор нужно дорабатывать а не советник? нужен исходник индикатора файл*.mq4. я посмотрю в интернете может найду исходник сам.
avatar

AM2

  • 11 мая 2015, 23:05
+1
добавлю также стрелки селл. могу сделать чтобы стрелки сразу создавались на графике штуки 2-3 вам только двигать останется
avatar

AM2

  • 11 мая 2015, 22:58
+2
При достижении ценой уровня графического объекта покупаем, предварительно переименовываем нашу стрелку в «BUY».



//+------------------------------------------------------------------+
//|                                                      Pointer.mq4 |
//|                                           Copyright © 2015, AM2. |
//|                                      http://www.forexsyatems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2015, AM2."
#property link      "http://www.forexsyatems.biz"

#define MagicNumber  20110315

extern double StopLoss     = 2400;
extern double TakeProfit   = 900;
extern double Slip         = 20;
extern string Pointer      = "BUY";
extern double Lot          = 0.1;

//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {//----   
      int    res;
      double price=0;
      //--- удаление всех созданных объектов
      int obj_total=ObjectsTotal();
      for(int i=obj_total-1;i>=0;i--)
        {
         string name=ObjectName(i);
         if(ObjectType(name)==OBJ_ARROW)
           {
            price=ObjectGet(Pointer,OBJPROP_PRICE1);
           }
        }

      Comment("\n Цена покупки ",price,
              "\n Цена Ask ",Ask);
              
              
      //---- buy 
      if((Ask>=price && Ask<=price+Slip*Point) || (Ask<=price && Ask>=price-Slip*Point))
        {
         res=OrderSend(Symbol(),OP_BUY,Lot,Ask,100,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
         if(res<0)
           {
            Print("Ошибка: ",GetLastError());
            Sleep(500);
            RefreshRates();
           }
         else
            Print("OK Order Buy");
         return;
        }
/*---- sell   
   if(price==Bid) 
     {
      res=OrderSend(Symbol(),OP_SELL,Lot,Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
      return;
     } */
     }
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 11 мая 2015, 20:04
0
Сейчас попробую набросать советник с одной стрелкой для начала
avatar

AM2

  • 11 мая 2015, 16:42