Хотел написать советника, чтобы открывал позицию на пробое Hi предыдущего дня. И закрывал по параболику который работал бы на тайм-фрейме Н-1. Вроде всё казалось бы просто. не получается! Т.е. тестер не видит условия
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)>Bid). Всё срабатывает по стоп-лоссу
Весь код вот:
extern int TrailStop = 15;
extern int StopLoss = 15;
extern int Koefficient = 6;
int Spread,Ticket,Normaling,BUY_new,SELL_new,Error,d,n,Magic;
double Max,Min,Pr,LOTSTEP,Obyem,Obyem1,ma,sar,LastBid,LastCheckPoint,Temp,SL;
bool res,Trail=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Magic=(TimeCurrent());
LOTSTEP=MarketInfo(Symbol(),MODE_MINLOT);
if(LOTSTEP==0.1) Normaling=1;
if(LOTSTEP==0.01) Normaling=2;
Obyem1=NormalizeDouble(AccountEquity()/(100000*Koefficient),Normaling);
if (MarketInfo(Symbol(),MODE_MINLOT)>Obyem1) Obyem=LOTSTEP; else Obyem=Obyem1;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
BUY_new=0;
SELL_new=0;
if(OrdersTotal()<1)
{
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)<Bid)
{
if(BUY_new==0)
{
if(SELL_new==0)
{
if(Bid >iHigh(NULL, PERIOD_D1,1))
{
RefreshRates();
Ticket=OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,Ask-StopLoss*Point,0,0,Magic,0,Blue);
BUY_new=1;
SELL_new=0;
}
}
}
}
}
if(Ticket>0)
{
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)>Bid)
{
if(BUY_new==1)
{
OrderClose(Ticket,Obyem,Bid,3,Blue);
SELL_new=0;
BUY_new=0;
Ticket=0;
}
}
}
return(0);
}
без этого условия открывает-закрывает сразу, но это и понятно.
Потом думал сделать трейлинг:
if(Trail)
{
if(BUY_new==1)
{
if(Bid-OrderOpenPrice()>Point*TrailStop)
{
if(OrderStopLoss()<Bid-Point*TrailStop)
{
OrderModify(Ticket,OrderOpenPrice(),Bid-Point*TrailStop,0,0,Green);
return(0);
}
}
}
}
опять тестер не видит его в упор. Точнее на операции BY он модифицирует SellStop ордера в минус, а на Sell -SellСтоп модифицирует в плюс. Что я делаю не так?
Проверял на ДЦ FX-iNVEST и Nord-FX. Сорри за переменные, которые не используются. Маюсь уже второй вечер
У меня есть небольшой опыт в программировании на С++ в MQL пишу впервые
То, что Вы определяете в ините, не касается старта. Пробуйте.
extern int TrailStop = 15; extern int StopLoss = 15; extern int Koefficient = 6; int Spread,Ticket,Normaling,BUY_new,SELL_new,Error,d,n,Magic; double Max,Min,Pr,LOTSTEP,Obyem,Obyem1,ma,sar,LastBid,LastCheckPoint,Temp,SL; bool res,Trail=true; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Magic=(TimeCurrent()); LOTSTEP=MarketInfo(Symbol(),MODE_MINLOT); if(LOTSTEP==0.1) Normaling=1; if(LOTSTEP==0.01) Normaling=2; Obyem1=NormalizeDouble(AccountEquity()/(100000*Koefficient),Normaling); if (MarketInfo(Symbol(),MODE_MINLOT)>Obyem1) Obyem=LOTSTEP; else Obyem=Obyem1; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(OrdersTotal()<1) { if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)<Bid) { if(BUY_new==0) { if(SELL_new==0) { if(Bid >iHigh(NULL, PERIOD_D1,1)) { RefreshRates(); Ticket=OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,Ask-StopLoss*Point,0,0,Magic,0,Blue); BUY_new=1; SELL_new=0; } } } } } if(Ticket>0) { if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)>Bid) { if(BUY_new==1) { OrderClose(Ticket,Obyem,Bid,3,Blue); SELL_new=0; BUY_new=0; Ticket=0; } } } return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Хотел написать советника, чтобы открывал позицию на пробое Hi предыдущего дня. И закрывал по параболику который работал бы на тайм-фрейме Н-1. Вроде всё казалось бы просто. не получается! Т.е. тестер не видит условия
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)>Bid). Всё срабатывает по стоп-лоссу
Весь код вот:
extern int TrailStop = 15;
extern int StopLoss = 15;
extern int Koefficient = 6;
int Spread,Ticket,Normaling,BUY_new,SELL_new,Error,d,n,Magic;
double Max,Min,Pr,LOTSTEP,Obyem,Obyem1,ma,sar,LastBid,LastCheckPoint,Temp,SL;
bool res,Trail=true;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
Magic=(TimeCurrent());
LOTSTEP=MarketInfo(Symbol(),MODE_MINLOT);
if(LOTSTEP==0.1) Normaling=1;
if(LOTSTEP==0.01) Normaling=2;
Obyem1=NormalizeDouble(AccountEquity()/(100000*Koefficient),Normaling);
if (MarketInfo(Symbol(),MODE_MINLOT)>Obyem1) Obyem=LOTSTEP; else Obyem=Obyem1;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
BUY_new=0;
SELL_new=0;
if(OrdersTotal()<1)
{
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)<Bid)
{
if(BUY_new==0)
{
if(SELL_new==0)
{
if(Bid >iHigh(NULL, PERIOD_D1,1))
{
RefreshRates();
Ticket=OrderSend(Symbol(),OP_BUY,Obyem,Ask,3,Ask-StopLoss*Point,0,0,Magic,0,Blue);
BUY_new=1;
SELL_new=0;
}
}
}
}
}
if(Ticket>0)
{
if(iSAR(NULL,PERIOD_H1,0.09,0.2,0)>Bid)
{
if(BUY_new==1)
{
OrderClose(Ticket,Obyem,Bid,3,Blue);
SELL_new=0;
BUY_new=0;
Ticket=0;
}
}
}
return(0);
}
без этого условия открывает-закрывает сразу, но это и понятно.
Потом думал сделать трейлинг:
if(Trail)
{
if(BUY_new==1)
{
if(Bid-OrderOpenPrice()>Point*TrailStop)
{
if(OrderStopLoss()<Bid-Point*TrailStop)
{
OrderModify(Ticket,OrderOpenPrice(),Bid-Point*TrailStop,0,0,Green);
return(0);
}
}
}
}
опять тестер не видит его в упор. Точнее на операции BY он модифицирует SellStop ордера в минус, а на Sell -SellСтоп модифицирует в плюс. Что я делаю не так?
Проверял на ДЦ FX-iNVEST и Nord-FX. Сорри за переменные, которые не используются. Маюсь уже второй вечер