Советники: 21hour

 

21hour:

В указанное врема ставим два отложенных ордера, при срабатывании одного из них, второй удаляем

Author: Maksim Zerkalov

 

Зачем велосипед изобретать. Уже есть советник e-News-Lucky$. Вот если бы добавил какое- нибудь условие по определению напраления открытия, тогда было бы что-то новое.

Если можешь добавь такое условие: если цена закрытия нового дня ниже цены закрытия предыдущего дня, то выставляем в короткую. Если цена закрытия нового дня выше цены закрытия

предыдущего дня, то выставляем в длинную. Если дневной бар внутренний, то ничего неставим. Время установки 00ч05м. Добавь стоплосс. Убери время закрытия.

Помоему такой прицип заложен в советнике на чемпионате Liliput. Там USDJPY, дневка. ТП-460, Стоплосс-180.

 

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

#property copyright "Copyright © 2008, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"



extern double Lots = 0.1;


extern int ChasStart = 15;


extern int MinuteStart = 15;


extern int ChasStop = 16;


extern int MinuteStop = 16;


extern int Step = 15;


extern int TP = 100;


int prevtime;


//+------------------------------------------------------------------+


//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----





int OrderCountOtl=0;
int i=0;
int total = OrdersTotal();
for(i = 0; i <= total; i++)
{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()>1) OrderCountOtl++;
}

}

if (OrderCountOtl==1)
{
for(i = 0; i <= total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()>1) OrderDelete(OrderTicket());
}
}
}


if(Time[0] == prevtime)
return(0);
prevtime = Time[0];
if(!IsTradeAllowed())
{
prevtime = Time[1];
return(0);
}



if (TimeHour(TimeCurrent())==ChasStart && TimeMinute(TimeCurrent())==MinuteStart)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,0,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,0,Bid-(Step+TP)*Point,"",12321,0,Red);
}

if (TimeHour(TimeCurrent())==ChasStop && TimeMinute(TimeCurrent())==MinuteStop)
{
i=0;
total = OrdersTotal();
for(i = 0; i <= total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
if (OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
if (OrderType()>1)OrderDelete(OrderTicket());
}
}
}

//----
return(0);
}
//+------------------------------------------------------------------+
 
Vkorch:

Зачем велосипед изобретать. Уже есть советник e-News-Lucky$. Вот если бы добавил какое- нибудь условие по определению напраления открытия, тогда было бы что-то новое.

Если можешь добавь такое условие: если цена закрытия нового дня ниже цены закрытия предыдущего дня, то выставляем в короткую. Если цена закрытия нового дня выше цены закрытия

предыдущего дня, то выставляем в длинную. Если дневной бар внутренний, то ничего неставим. Время установки 00ч05м. Добавь стоплосс. Убери время закрытия.

Помоему такой прицип заложен в советнике на чемпионате Liliput. Там USDJPY, дневка. ТП-460, Стоплосс-180.

домой приду, поковыряю, посмотрим что получится

 

Здравствуйте

поэкспериментировал с 21hour немного изменил код и теперь два отложенных ордера выставляются каждый час, круглые сутки. ТП-15 Стоп-15 Получается хороший слив на тестери. Я и подумал, а если за место Стоповых одеров выставлять Лимитные одера то наверно будет прибыль. Но как поменять стоповые на Лимитные я не знаю так как в этом дели полный 0. Кто может помогите изменить.




//+------------------------------------------------------------------+


//| 21hour.mq4 |


//| Copyright © 2008, MetaQuotes Software Corp. |


//| http://www.metaquotes.net |


//+------------------------------------------------------------------+


#property copyright "Copyright © 2008, MetaQuotes Software Corp."


#property link "http://www.metaquotes.net"



extern double Lots = 0.1;


extern bool RiskManagement=false; //money management


extern double RiskPercent=0.1; //risk in percentage


extern int ChasStart0 = 0;
extern int ChasStart1 = 1;
extern int ChasStart2 = 2;
extern int ChasStart3 = 3;
extern int ChasStart4 = 4;
extern int ChasStart5 = 5;
extern int ChasStart6 = 6;
extern int ChasStart7 = 7;
extern int ChasStart8 = 8;
extern int ChasStart9 = 9;
extern int ChasStart10 = 10;
extern int ChasStart11 = 11;
extern int ChasStart12 = 12;
extern int ChasStart13 = 13;
extern int ChasStart14 = 14;
extern int ChasStart15 = 15;
extern int ChasStart16 = 16;
extern int ChasStart17 = 17;
extern int ChasStart18 = 18;
extern int ChasStart19 = 19;
extern int ChasStart20 = 20;
extern int ChasStart21 = 21;
extern int ChasStart22 = 22;
extern int ChasStart23 = 23;
extern int ChasStop = 24;
extern int Step = 15;
extern int SL = 0;
extern int TP = 15;
int prevtime;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----


//risk management
bool MM=RiskManagement;
if(MM){if(RiskPercent<0.1||RiskPercent>100){Comment("Invalid Risk Value.");return(0);}
else{Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*RiskPercent*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*
MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}}
if(MM==false){Lots=Lots;}


int OrderCountOtl=0;
int i=0;
int total = OrdersTotal();
for(i = 0; i <= total; i++)
{

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()>1) OrderCountOtl++;
}

}

if (OrderCountOtl==1)
{
for(i = 0; i <= total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()>1) OrderDelete(OrderTicket());
}
}
}


if(Time[0] == prevtime)
return(0);
prevtime = Time[0];
if(!IsTradeAllowed())
{
prevtime = Time[1];
return(0);
}


if (TimeHour(TimeCurrent())==ChasStart0 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart1 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart2 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart3 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart4 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart5 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart6 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart7 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart8 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart9 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart10 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart11 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart12 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart13 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart14 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart15 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart16 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart17 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart18 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart19 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart20 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart21 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart22 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStart23 && TimeMinute(TimeCurrent())==0)
{
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,Ask-SL*Point,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,Bid+SL*Point,Bid-(Step+TP)*Point,"",12321,0,Red);
}
if (TimeHour(TimeCurrent())==ChasStop && TimeMinute(TimeCurrent())==0)
{
i=0;
total = OrdersTotal();
for(i = 0; i <= total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber() == 12321)
{
if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
if (OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
if (OrderType()>1)OrderDelete(OrderTicket());
}
}
}

//----
return(0);
}
//+------------------------------------------------------------------+
 
olegjan:

Здравствуйте

поэкспериментировал с 21hour немного изменил код и теперь два отложенных ордера выставляются каждый час, круглые сутки. ТП-15 Стоп-15 Получается хороший слив на тестери. Я и подумал, а если за место Стоповых одеров выставлять Лимитные одера то наверно будет прибыль. Но как поменять стоповые на Лимитные я не знаю так как в этом дели полный 0. Кто может помогите изменить.


И зачем все это надо было писать, на часовом графике можно было бы просто оставить :
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,0,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,0,Bid-(Step+TP)*Point,"",12321,0,Red);
без всяких условий.
 
Vkorch:

Зачем велосипед изобретать. Уже есть советник e-News-Lucky$. Вот если бы добавил какое- нибудь условие по определению напраления открытия, тогда было бы что-то новое.

Если можешь добавь такое условие: если цена закрытия нового дня ниже цены закрытия предыдущего дня, то выставляем в короткую. Если цена закрытия нового дня выше цены закрытия

предыдущего дня, то выставляем в длинную. Если дневной бар внутренний, то ничего неставим. Время установки 00ч05м. Добавь стоплосс. Убери время закрытия.

Помоему такой прицип заложен в советнике на чемпионате Liliput. Там USDJPY, дневка. ТП-460, Стоплосс-180.

в личку загляни

 
zerkmax:
Vkorch:

Зачем велосипед изобретать. Уже есть советник e-News-Lucky$. Вот если бы добавил какое- нибудь условие по определению напраления открытия, тогда было бы что-то новое.

Если можешь добавь такое условие: если цена закрытия нового дня ниже цены закрытия предыдущего дня, то выставляем в короткую. Если цена закрытия нового дня выше цены закрытия

предыдущего дня, то выставляем в длинную. Если дневной бар внутренний, то ничего неставим. Время установки 00ч05м. Добавь стоплосс. Убери время закрытия.

Помоему такой прицип заложен в советнике на чемпионате Liliput. Там USDJPY, дневка. ТП-460, Стоплосс-180.

в личку загляни

Скажи почту, у меня нет аськи.

 
zerkmax:
olegjan:

Здравствуйте

поэкспериментировал с 21hour немного изменил код и теперь два отложенных ордера выставляются каждый час, круглые сутки. ТП-15 Стоп-15 Получается хороший слив на тестери. Я и подумал, а если за место Стоповых одеров выставлять Лимитные одера то наверно будет прибыль. Но как поменять стоповые на Лимитные я не знаю так как в этом дели полный 0. Кто может помогите изменить.


И зачем все это надо было писать, на часовом графике можно было бы просто оставить :
OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Step*Point,3,0,Ask+(Step+TP)*Point,"",12321,0,Green);
OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Step*Point,3,0,Bid-(Step+TP)*Point,"",12321,0,Red);
без всяких условий.

Я-ж говорю полный 0.

 
Vkorch:
zerkmax:
Vkorch:

Зачем велосипед изобретать. Уже есть советник e-News-Lucky$. Вот если бы добавил какое- нибудь условие по определению напраления открытия, тогда было бы что-то новое.

Если можешь добавь такое условие: если цена закрытия нового дня ниже цены закрытия предыдущего дня, то выставляем в короткую. Если цена закрытия нового дня выше цены закрытия

предыдущего дня, то выставляем в длинную. Если дневной бар внутренний, то ничего неставим. Время установки 00ч05м. Добавь стоплосс. Убери время закрытия.

Помоему такой прицип заложен в советнике на чемпионате Liliput. Там USDJPY, дневка. ТП-460, Стоплосс-180.

в личку загляни

Скажи почту, у меня нет аськи.

zma@mail.ru

 

Всем привет. Не могу понять почему ордера иногда закрываются в установленное время в текущие сутки, а иногда на следующие, я не имею виду переход
с пятнищи на понедельник. Это глюк или есть какое-то условие? Объясните кто в курсе

Причина обращения: