+1
Свой набросок могу доработать, а чужой код не правлю.
avatar

AM2

  • 11 мая 2017, 17:10
0
Сделал 2 в одном: www.opentraders.ru/downloads/1553/

extern int LimitStop = 0;  // 0-лимит 1-стоп.


avatar

AM2

  • 11 мая 2017, 02:31
0
В индикаторе BreakOutPANCA-EAGLE также не индикаторных буферов и вытащить сигнал будет достаточно проблематично.
avatar

AM2

  • 11 мая 2017, 02:13
0
Обращайтесь к платному, быстро у меня не получилось сделать.
avatar

AM2

  • 9 мая 2017, 17:03
0
Тогда ставьте магик 0. В советнике есть удаление ордеров когда нет позиций:

if(CountTrades()<1) DelOrder();


В строке 241 :) 
avatar

AM2

  • 9 мая 2017, 14:58
0
Там же по общему профиту закрытие, насколько я помню.
avatar

AM2

  • 9 мая 2017, 14:00
0
Добавил: www.opentraders.ru/downloads/1578/



1. Неактивированный ордер должен удаляться всегда в указанное время, а он висит вечно.

2. В заданное время робот только удаляет сами линии, но не ордера, даже рыночный продолжает висеть.

3. Стопы и тейки не ставятся на линиях, а это очень важно.

4. Нет Мин и Макс дельт канала, они тоже нужны.

5. Мартин странно работает. Увеличивает объем не на следующий, а в текущий день и заменяет ордер.


avatar

AM2

  • 9 мая 2017, 11:58
0
Можно ли поправить расположение надписей отчета о текущих сделках — сделать их под окошком дельты?


Регулируется здесь:


   Comment("\n Profit: ",DoubleToString(AllProfit(),2),
           "\n Last Order Type: ",LastOrderType(),
           "\n Count Trades: ",CountTrades(),
           "\n Delta: ",delta);


Чтобы зделать ниже, добавляется в начало коммента необходимое количество:

"\n","\n","\n","\n"...


Будет примерно так:

Comment("\n","\n","\n",
"\n Profit: ",DoubleToString(AllProfit(),2),
"\n Last Order Type: ",LastOrderType(),
"\n Count Trades: ",CountTrades(),
"\n Delta: ",delta);


avatar

AM2

  • 9 мая 2017, 11:12
0
Поправил 69 предупреждений: www.opentraders.ru/downloads/1577/

avatar

AM2

  • 9 мая 2017, 08:47
0
Я протестировал, у меня все работает. Если у вас не работает, обратитесь к другому специалисту.
avatar

AM2

  • 9 мая 2017, 07:56
0
Здесь делаю только то что можно быстро сделать, а ваш заказ уже явно не быстро.
avatar

AM2

  • 9 мая 2017, 07:43
0
Сложные делаю в упрощенном виде.
avatar

AM2

  • 9 мая 2017, 07:41
0
Последний вариант постом выше смотрели?
avatar

AM2

  • 8 мая 2017, 17:23
0
Открыл 2 позы бай и селл, выставил отложки:



Закрыл продажу, удалился байстоп:



Закрыл покупку удалился селлстоп:



А где ваши скрины? :) 


//+------------------------------------------------------------------+
//|                                                      Poshnik.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern int StopLoss      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Delta         = 100;      // расстояние от цены
extern int BuySell       = 0;        // 1-buy 2-sell 0-off
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Установка ордера                                                 |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2) count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MarketOOP()
  {
   double oop=0;

   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) oop=OrderOpenPrice();
     }

   return(oop);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelOrder()
  {
   double op=0;
   bool d=true;
/*
1. Проверяем последнюю закрытую позицию
2. Смотрим цену открытия позиции
3. Смотрим направление позиции
4. Проверяем наличие отложки по цене ООП+-дельта
5. Если есть удаляем
*/
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      op=OrderOpenPrice();
     }
     
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()==4 && OrderOpenPrice()==NormalizeDouble((op+Delta*Point),Digits)) d=OrderDelete(OrderTicket());
         if(OrderType()==5 && OrderOpenPrice()==NormalizeDouble((op-Delta*Point),Digits)) d=OrderDelete(OrderTicket());
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MarketLot()
  {
   double lot=0;

   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) lot=OrderLots();
     }

   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(Lots==0) lot=MarketLot();

   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int LastType()
  {
   int type=8;

   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()<2) type=OrderType();
     }

   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double StopOOP()
  {
   double oop=0;

   if(OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderType()>1) oop=OrderOpenPrice();
     }

   return(oop);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   DelOrder();
   
   if(CountTrades()<1)
     {
      if(BuySell==1) PutOrder(0,Ask);
      if(BuySell==2) PutOrder(1,Bid);
     }

   if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()-Delta*Point,Digits) && LastType()==0) PutOrder(5,MarketOOP()-Delta*Point);
   if(MarketOOP()>0 && StopOOP()!=NormalizeDouble(MarketOOP()+Delta*Point,Digits) && LastType()==1) PutOrder(4,MarketOOP()+Delta*Point);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 8 мая 2017, 13:28
0
С буферов вашего индикатора не вытащишь никаких значений и тем более не знаешь что там у вас внутри зашито. А с нуля писать индикатор и советник это не ко мне.
avatar

AM2

  • 8 мая 2017, 12:33
0
Более 4-х часов ушло на то чтобы перенести расчеты в советник и написать торговлю от границ канала. Далее в новом топике или к платному.




//+------------------------------------------------------------------+
//|                                                  MorningFlat.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots        = 0.1;      // лот
extern double KLot        = 2;        // умножение лота
extern double MaxLot      = 5;        // максимальный лот

extern double TargetLevel = 200;      // таргет уровень

extern int StopLoss       = 300;      // лось
extern int TakeProfit     = 600;      // язь
extern int Delta          = 50;       // расстояние от границы канала

extern int StartHour      = 10;       // час начала торговли
extern int StartMin       = 30;       // минута начала торговли
extern int EndHour        = 22;       // час окончания торговли
extern int EndMin         = 30;       // минута окончания торговли

extern int StartH         = 0;        // час начала канала
extern int StartM         = 30;       // минута начала канала
extern int EndH           = 9;        // час окончания канала
extern int EndM           = 30;       // минута окончания канала

extern int Slip           = 30;       // реквот
extern int Magic          = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int StartBar=iBarShift(NULL,0,StringToTime((string)StartH+":00"+(string)StartM+":00"));
   int EndBar=iBarShift(NULL,0,StringToTime((string)EndH+":00"+(string)EndM+":00"));

   double up = High[iHighest(NULL,0,MODE_HIGH,StartBar-EndBar,EndBar)];
   double dn = Low[iLowest(NULL,0,MODE_LOW,StartBar-EndBar,EndBar)];

   double TargetUP=(up-dn)*(TargetLevel-100)/100+up;         // Верхняя цель
   double TargetDN=dn-(up-dn)*(TargetLevel-100)/100;         // Нижняя цель

   PutTrendLine("UP",Time[StartBar],up,Time[EndBar],up,Red);
   PutTrendLine("DN",Time[StartBar],dn,Time[EndBar],dn,Blue);

   PutTrendLine("tUP",Time[1],TargetUP,Time[EndBar],TargetUP,Yellow);
   PutTrendLine("tDN",Time[1],TargetDN,Time[EndBar],TargetDN,Green);

   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      if(CountOrders(4)<1 && Bid<up) PutOrder(4,up+Delta*Point);
      if(CountOrders(5)<1 && Bid>dn) PutOrder(5,dn-Delta*Point);
     }

   Comment("\n up: ",up,
           "\n dn: ",dn,
           "\n start: ",StartBar,
           "\n end: ",EndBar);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 8 мая 2017, 10:31
0
Из буферов индикатора монинг флет значения линий не вытащишь. Могу сделать расчет в самом советнике и таргет по формуле какую укажете.
avatar

AM2

  • 8 мая 2017, 08:37
+1
Вам надо было собирать на основе усреднителя: www.opentraders.ru/downloads/1574/



avatar

AM2

  • 7 мая 2017, 16:55