0
Подправила файл, у меня на демо заработал.
//+------------------------------------------------------------------+
//|                                             4-7 GMT Breakout.mq4 |
//|                                                Copyright © 2009. |
//|                                           http://strategy4you.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009."
#property link      "http://strategy4you.ru"
#define h2s         3600
extern double Lot=1.0;            // Размер лота для одного ордера(если 0 - расчитывается автоматически)
extern int    MaxRisk=2;          // % от свободных средств(для расчета лота)
extern int    GMTShift=2;         // Смещение времени брокера относительно GMT
extern string StartTime="04:00";  // Время начала интервала(время GMT)
extern string EndTime="06:59";    // Время окончания интервала(время GMT)
extern string DelTime="18:00";    // Час удаления отложенных ордеров(время GMT)
extern int    TakeProfit=30;      // Тейкпрофит(если 0 - то ширина коробки) для 1 ордера. Для 2 удваивается.
extern int    StopLoss=0;         // Стоплосс(если 0 - то ширина коробки)
extern int    Delta=7;            // Смещение для установки ордеров
extern int    NoTrade=0;          // Кол-во пунктов больше которого не торгуем(если 0 - торгуем всегда)
extern bool   ShowWarn=true;      // Выводить пользователю предупреждения
extern int    Magic = 91006;      // Magic
string StrategyName="4-7 GMT Breakout";
string error;
double h=0;
double l=0;
datetime d=0;
//+------------------------------------------------------------------+
int init()
{if(!IsTradeAllowed()) return(INIT_FAILED);
 if(TakeProfit!=0 && TakeProfit<MarketInfo(Symbol(),MODE_STOPLEVEL))
   {Alert("Тейкпрофит меньше разрешенного борокером!");return(INIT_FAILED);}
 if(StopLoss!=0 && StopLoss<MarketInfo(Symbol(),MODE_STOPLEVEL))
   {Alert("Стоплосс меньше разрешенного борокером!"); return(INIT_FAILED);}
 if(Lot!=0 && Lot<MarketInfo(Symbol(),MODE_MINLOT))
   {Alert("Лот меньше разрешенного брокером!"); return(INIT_FAILED);}
 if(Lot!=0 && Lot>MarketInfo(Symbol(),MODE_MAXLOT))
   {Alert("Лот больше разрешенного брокером!"); return(INIT_FAILED);}
 if(Lot==0 && MaxRisk<1)
   {Alert("Неправильно задан % от свободных средств для расчета лота!"); return(INIT_FAILED);}
 if(Lot==0 && MaxRisk>100)
   {Alert("Неправильно задан % от свободных средств для расчета лота!"); return(INIT_FAILED);}
 
return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
int deinit() {Comment("");return(0);}
//+------------------------------------------------------------------+
int start()
{
 if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем
 if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят
 double mLot=Lot;
 if(Lot==0.0) mLot=GetOptimalLot(MaxRisk);
 double a=NormalizeDouble(Ask,Digits);
 double b=NormalizeDouble(Bid,Digits);
//...подсчет ордеров
 int oBuy=0,oSell=0,sBuy=0,sSell=0;
 for(int i=0;i<OrdersTotal();i++)
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
       {if(OrderType()==OP_BUY) oBuy++;
        if(OrderType()==OP_SELL) oSell++;
        if(OrderType()==OP_BUYSTOP) sBuy++;
        if(OrderType()==OP_SELLSTOP) sSell++;}
//...Удалим не сработавшие отложки если есть и перенесем в безубыток
 if(oBuy+oSell+sBuy+sSell>0)
   for(i=0;i<OrdersTotal();i++)
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
            if(StrToTime(DelTime+":00")+GMTShift*h2s<=TimeCurrent()) DelOrder();
          if(OrderType()==OP_BUY && oBuy==1 && OrderOpenPrice()>OrderStopLoss()+2*Point)
            EditOrder(OrderOpenPrice(),OrderTakeProfit(),OrderOpenPrice());
          if(OrderType()==OP_SELL && oSell==1 && OrderOpenPrice()<OrderStopLoss()-2*Point)
            EditOrder(OrderOpenPrice(),OrderTakeProfit(),OrderOpenPrice());}
//...проверка что сегодня уже торговали
 if(d==TimeDay(TimeCurrent())) return(0);
//...расчет коробки
 if(TimeCurrent()<StrToTime(StartTime+":00")+GMTShift*h2s) return(0);
 int sBar=iBarShift(NULL,0,StrToTime(StartTime+":00")+GMTShift*h2s);
 int eBar=iBarShift(NULL,0,StrToTime(EndTime+":59")+GMTShift*h2s);
 int cBar=sBar-eBar+1;
 h=NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,cBar,eBar)],Digits);
 l=NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,cBar,eBar)],Digits);
 int box=(h-l)*MathPow(10,Digits);
//...проверим размер коробки
 if(NoTrade!=0 && box>NoTrade)
   {error="Размер коробки: "+box+" больше разрешенного: "+NoTrade+"! Не торгуем.";
    if(ShowWarn) Alert(error);
    Print(error);
    d=TimeDay(TimeCurrent());
    return(0);}
//...наступило время Ч?
 if(TimeCurrent()<=StrToTime(EndTime+":59")+GMTShift*h2s) return(0);
//...Выставим отложенные ордера
 if(oBuy+oSell+sBuy+sSell==0 && a<h && b>l)
   {double level=MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
    if((h-a)<level)
      {error="Цена слишком близко от верхнего уровня! Верхний уровень увеличен.";
       if(ShowWarn) Alert(error);
       Print(error);
       h=a+level+2*Point;}
    if((b-l)<level)
      {error="Цена слишком близко от нижнего уровня! Нижний уровень уменьшен.";
       if(ShowWarn) Alert(error);
       Print(error);
       l=b-level-2*Point;}
    double bp=NormalizeDouble(h+Delta*Point,Digits);
    double sp=NormalizeDouble(l-Delta*Point,Digits);
    double TP=0,SL=0;
    if(StopLoss>0) SL=StopLoss*Point; else SL=h-l;
    if(TakeProfit>0) TP=TakeProfit*Point; else TP=h-l;
    if(SL<level)
      {error="Цена слишком близко от уровня Стоплосса! Уровень Стоплосса увеличен.";
       if(ShowWarn) Alert(error);
       Print(error);
       SL=level;}
    if(TP<level)
      {error="Цена слишком близко от уровня Профита! Уровень Профита увеличен.";
       if(ShowWarn) Alert(error);
       Print(error);
       TP=level;}
    NewOrder(OP_BUYSTOP,mLot,bp,bp+TP,bp-SL);
    NewOrder(OP_BUYSTOP,mLot,bp,bp+TP*2,bp-SL);
    NewOrder(OP_SELLSTOP,mLot,sp,sp-TP,sp+SL);
    NewOrder(OP_SELLSTOP,mLot,sp,sp-TP*2,sp+SL);
    d=TimeDay(TimeCurrent());
   }
//...конец
return(0);}
//+------------------------------------------------------------------+
int NewOrder(int Cmd,double lot,double pr,double tp=0,double sl=0)
{int tick=0;
 for(int er=0;er<3;er++)
   {while(!IsTradeAllowed()) Sleep(100);
    tick=OrderSend(Symbol(),Cmd,lot,pr,3,sl,tp,StrategyName,Magic,0,CLR_NONE);
    if(tick>0) break;
    Print("#",OrderTicket(),"  Error: ",GetLastError()," Function: NewOrder(",Cmd,",",lot,",",pr,",",tp,",",sl,") №",er);
    Sleep(1000);}
return(tick);}
//+------------------------------------------------------------------+
void EditOrder(double pr,double tp,double sl)
{for(int er=0;er<3;er++)
  {while(!IsTradeAllowed()) Sleep(100);
   if(OrderModify(OrderTicket(),pr,sl,tp,0,CLR_NONE)) break;
   Print("#",OrderTicket(),"  Error: ",GetLastError()," Function: EditOrder(",pr,",",tp,",",sl,") №",er);
   Sleep(1000);}}
//+------------------------------------------------------------------+
void DelOrder()
{for(int er=0;er<3;er++)
  {while(!IsTradeAllowed()) Sleep(100);
   if(OrderDelete(OrderTicket(),CLR_NONE)) break;
   Print("#",OrderTicket(),"  Error: ",GetLastError()," Function: DelOrder() №",er);
   Sleep(1000);}}
//+------------------------------------------------------------------+
double NormLot(double lot)
{double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);
 double Max_Lot=MarketInfo(Symbol(),MODE_MAXLOT);
 double Step   =MarketInfo(Symbol(),MODE_LOTSTEP);
 int    DigLot =0;
 if(Step<0.1)  DigLot=2;
 if(Step>=0.1) DigLot=1;
 if(Step>=1)   DigLot=0;
 if(lot<Min_Lot) lot=Min_Lot;
 if(lot>Max_Lot) lot=Max_Lot;
return(NormalizeDouble(lot,DigLot));}
//+------------------------------------------------------------------+
double GetOptimalLot(int Percent)
{double Free    =AccountFreeMargin();
 double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
 double Step    =MarketInfo(Symbol(),MODE_LOTSTEP);
 double Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;
return(NormLot(Lots_New));}
//+------------------------------------------------------------------+

В программе MetaEditor в исходнике полностью замените код на этот и нажмите кнопку «компилировать»
avatar

Oxy

  • 27 апреля 2015, 20:46
0
к своим сделкам, которых распознает по магику
avatar

Oxy

  • 27 апреля 2015, 18:11
0
так мне его не скачать :D 

вы мне на сам файл ссылку дайте
avatar

Oxy

  • 27 апреля 2015, 15:55
0
russwill, если вам нужен другой советник или изменить/дополнить в чей-то существующий, публикуйте в этой группе свой топик с подробным описанием, что нужно.
avatar

Oxy

  • 27 апреля 2015, 15:52
0
Залить его на файлообменник:
www.opentraders.ru/downloads/
или сюда или в другое место.
И здесь в комментарии дать ссылку.
avatar

Oxy

  • 27 апреля 2015, 13:32
0
скидывайте, я посмотрю его
avatar

Oxy

  • 27 апреля 2015, 13:17
0
Редактировать пост можно только в течение короткого промежутка времени, это сделано специально, для тех, кто публикует прогнозы. Удалить пост вы тоже уже не можете. Плюс этот пост может помочь кому-то другим, кто ищет подобные советники, поэтому пусть будет.
avatar

Oxy

  • 27 апреля 2015, 13:05
0
Хорошо, напишу. Я не говорила, что формула «глупая», просто когда просчитываешь сам — видишь больше нюансов.
avatar

Oxy

  • 27 апреля 2015, 12:13
0
Для начала посмотрите похожие советники, может вам что-то подойдет из них:
opentraders.ru/downloads/577/
opentraders.ru/downloads/581/
opentraders.ru/downloads/617/
И сейчас наиболее обсуждаемый в топике:
opentraders.ru/downloads/648/
avatar

Oxy

  • 27 апреля 2015, 12:11
0
Создайте новую тему — прикручу.
avatar

Oxy

  • 27 апреля 2015, 12:04
0
Из словарей русского языка:
Программа — строго определенная последовательность действий, предназначенная для достижения конкретного результата.
В информатике код определяет способ описания информации, последовательности действий в символьной форме.
avatar

Oxy

  • 27 апреля 2015, 12:02
0
Данный параметр не относится к описанной логике советника. Он технический.
Уже при конкретном действии открыть ордер, советник еще раз запрашивает текущую цену и отдает приказ серверу на открытие. Если вдруг случилось проскальзывание, то ордер не откроется.
avatar

Oxy

  • 27 апреля 2015, 11:56
0
Если я вас правильно поняла, то этот советник, продолжение экспериментов от сюда: zakaz.opentraders.ru/24680.html
Если б вы сами логику проработали на графике, или в excel-е, то вы бы поняли её слабые моменты.
А так, я вам пишу советник — вас не устраивает результат, вы просите новый, не особо вникая, а почему же получился такой результат. Мне не сложно написать вам советник. Но если вы действительно хотите выдумать что-то работающее, то надо самому сидеть и всё просчитывать. Как вариант — это сделать в excel.
avatar

Oxy

  • 27 апреля 2015, 11:53
0
Чем отличается советник opentraders.ru/downloads/617/ от вашей стратегии? Опишите отличие и я напишу вам вашу логику.
avatar

Oxy

  • 27 апреля 2015, 11:48
0
сделаю
avatar

Oxy

  • 26 апреля 2015, 22:42