Вы рыночные ордера пытаетесь открыть OP_BUY,OP_SELL, копайте в сторону OP_BUYSTOP, OP_SELLSTOP.
Вот сейчас Вам помогу! Нажимаю на SRC и вставляю, чтобы Вам и остальным было бы читать удобно:
extern double TakeProfit = 50; extern int StopLoss = 10000; extern double Lots = 2.0; extern int Trailing = 10; extern int Step = 0; extern int MAGIC = 121; extern int MAGIC1 = 122; extern int MAGIC2 = 123; extern int MAGIC3 = 124; extern int Price = 0; //Apply to price extern int AMA_Period = 10; //Period of AMA extern int N_fast = 2; //Period of fast EMA extern int N_slow = 30; //Period of slow EMA extern int ER_smooth = 5; //Period of smoothing of Efficiency Ratio extern double SC_power = 2; //Power of smoothing constant extern double PctFilter = 2.0; //Percentage of dynamic filter extern int Mode = 0; //Mode switch (0-usual;1-stepped) extern int Color = 0; //Switch of Color mode (1-color) extern int ColorBarBack = 1; //Bar back for color mode extern int AlertMode = 0; //Sound Alert switch extern int WarningMode = 0; //Warning switch //extern int MA.Period = 35; //extern int MA.method = 0;//MODE_SMA extern int sigma_b=20; //количество пунктов на пробой линии открывает ордер после пробоя БАЙ extern int sigma_s=20; //количество пунктов на пробой линии открывает ордер после пробоя СЕЛ int br=0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int cnt, ticket, total, MAGIC, MAGIC1, MAGIC2, MAGIC3; if(Bars<100) { Print("bars less than 100"); return(0); } // if(TakeProfit<10) // { // Print("TakeProfit less than 10"); // return(0); // check TakeProfit // } //double zz=iCustom(NULL,NextTF,"HiLo_Act_Next_Profi2",Range,0,1); double zz1=iCustom(NULL,0,"AdvancedAMA",Price,AMA_Period,N_fast,N_slow,ER_smooth,SC_power,PctFilter,Mode,Color,ColorBarBack,AlertMode,WarningMode,0,0); total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } // check for long position (BUY) possibility if((Ask>=(zz1+sigma_b*Point))&&(Close[1]<zz1)&& br<Bars)//||(Close[3]<zz1)) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"0",MAGIC,0,Green); br=Bars; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } // check for short position (SELL) possibility if((Bid<=(zz1-sigma_s*Point))&&(Close[1]>zz1)&& br<Bars)//||(Close[3]>zz1)) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"0",MAGIC1,0,Red); br=Bars; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { if(Trailing>0) { if(Bid-OrderOpenPrice()>Point*Trailing) { if((OrderStopLoss()<Bid-Point*Trailing && (Bid-Point*Trailing)-OrderStopLoss()>Step*Point) || OrderStopLoss()==0) { if(Bid-Point*Trailing!=OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0); return(0); } } } } else { if(Trailing>0) { if((OrderOpenPrice()-Ask)>(Point*Trailing)) { if((OrderStopLoss()>(Ask+Point*Trailing) && (OrderStopLoss()-(Ask+Point*Trailing)>Step*Point)) || OrderStopLoss()==0) { if(Ask+Point*Trailing!=OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0); return(0); } } } } } } }
dualbit:
Вы рыночные ордера пытаетесь открыть OP_BUY,OP_SELL, копайте в сторону OP_BUYSTOP, OP_SELLSTOP.
Вы рыночные ордера пытаетесь открыть OP_BUY,OP_SELL, копайте в сторону OP_BUYSTOP, OP_SELLSTOP.
да рыночные открывает и почти работает так как нужно. но не могу понять как сделать отложки постоянно ошибка цены
а GetLastError() что говорит?)
Forextd:
да рыночные открывает и почти работает так как нужно. но не могу понять как сделать отложки постоянно ошибка цены
См. Документацию и Словарь МетаЭдитора!
да рыночные открывает и почти работает так как нужно. но не могу понять как сделать отложки постоянно ошибка цены
4107Неправильный параметр цены для торговой функции
130 Неправильные стопы
Forextd:
Это Вам ответ! Значит, надо неправильное поправить! Если не знаете как, начинайте с учебника и учиться серьёзно и вдумчиво, постепенно усваивая и проверяя на примерах! Успехов!
4107Неправильный параметр цены для торговой функции
130 Неправильные стопы
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Сделал советника по индикатору AdvancedAMA.mq4
немогу сделать отложенные ордера которые должны выставляться на уровне значения индикатора
в настройках есть отклонение от уровня индикатора если 0 то отложка выставляется на уровне индикатора
изначальный стоп модифицируется и выставляется в безубытокесли есть трал то работает трал но если индикатор изменился то стоп выставляется на уровень индикатора
в рынке может быть 4 ордера 2 бай 2 сел
вот так вот хотелось бы видеть.
МОЖЕТ КТО ПОМОЖЕТ
extern double TakeProfit = 50;
extern int StopLoss = 10000;
extern double Lots = 2.0;
extern int Trailing = 10;
extern int Step = 0;
extern int MAGIC = 121;
extern int MAGIC1 = 122;
extern int MAGIC2 = 123;
extern int MAGIC3 = 124;
extern int Price = 0; //Apply to price
extern int AMA_Period = 10; //Period of AMA
extern int N_fast = 2; //Period of fast EMA
extern int N_slow = 30; //Period of slow EMA
extern int ER_smooth = 5; //Period of smoothing of Efficiency Ratio
extern double SC_power = 2; //Power of smoothing constant
extern double PctFilter = 2.0; //Percentage of dynamic filter
extern int Mode = 0; //Mode switch (0-usual;1-stepped)
extern int Color = 0; //Switch of Color mode (1-color)
extern int ColorBarBack = 1; //Bar back for color mode
extern int AlertMode = 0; //Sound Alert switch
extern int WarningMode = 0; //Warning switch
//extern int MA.Period = 35;
//extern int MA.method = 0;//MODE_SMA
extern int sigma_b=20; //количество пунктов на пробой линии открывает ордер после пробоя БАЙ
extern int sigma_s=20; //количество пунктов на пробой линии открывает ордер после пробоя СЕЛ
int br=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, total, MAGIC, MAGIC1, MAGIC2, MAGIC3;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
// if(TakeProfit<10)
// {
// Print("TakeProfit less than 10");
// return(0); // check TakeProfit
// }
//double zz=iCustom(NULL,NextTF,"HiLo_Act_Next_Profi2",Range,0,1);
double zz1=iCustom(NULL,0,"AdvancedAMA",Price,AMA_Period,N_fast,N_slow,ER_smooth,SC_power,PctFilter,Mode,Color,ColorBarBack,AlertMode,WarningMode,0,0);
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility
if((Ask>=(zz1+sigma_b*Point))&&(Close[1]<zz1)&& br<Bars)//||(Close[3]<zz1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"0",MAGIC,0,Green);
br=Bars;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// check for short position (SELL) possibility
if((Bid<=(zz1-sigma_s*Point))&&(Close[1]>zz1)&& br<Bars)//||(Close[3]>zz1))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"0",MAGIC1,0,Red);
br=Bars;
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
if(Trailing>0)
{
if(Bid-OrderOpenPrice()>Point*Trailing)
{
if((OrderStopLoss()<Bid-Point*Trailing && (Bid-Point*Trailing)-OrderStopLoss()>Step*Point) || OrderStopLoss()==0)
{
if(Bid-Point*Trailing!=OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0);
return(0);
}
}
}
}
else
{
if(Trailing>0)
{
if((OrderOpenPrice()-Ask)>(Point*Trailing))
{
if((OrderStopLoss()>(Ask+Point*Trailing) && (OrderStopLoss()-(Ask+Point*Trailing)>Step*Point)) || OrderStopLoss()==0)
{
if(Ask+Point*Trailing!=OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*Trailing,OrderTakeProfit(),0);
return(0);
}
}
}
}
}
}
}