вы хотите... Теперь, в соответствии с моим требованием, когда цена будет в прибыли, скажем, 7 пунктов [103.603], стоп лосс
1-ой и 2-ой сделок станет, скажем, 1 пункт прибыли [103.543], а Stop Loss 3-ей сделки останется на уровне 103.386.
сделать extern int BreakEven = 7
(* 10 ) коррекция у 5-значного брокера для получения значения пункта
Ооо, да, это, конечно, недостаток. Вся моя тяжелая работа с вечера теперь напрасна!
Попробовал способ различать сделки в зависимости от функции'order comment' и написал код.
В любом случае, приведенный вами код делает перемещение части Stop Loss на BE или в нужную точку, но все равно моя проблема с "третьей" сделкой не решается.
У меня также есть эта часть кода, перемещающая BE, но я застрял с неперемещающимся SL для третьей сделки.
if (Order_Symbol== "EURUSD") //it has to be a string if you do it this way
{ //==EURUSD) failsint Magic_Number_3=1303int Magic_Number_2=1302int Magic_Number_1=1301
}
таким образом, вам придется искать 3 разных магических числа
Это не проблема. Символ брокера, на котором я тестирую советника - EURUSD,GBPUSD.....
Если я прикреплю советника к брокеру, у которого символ EURUSDpro, я просто добавлю "pro".
Вы просмотрели мой код?
Функция минимальной прибыли - это 'Failure'.
Она просто закрывает все открытые сделки при каждом исполнении, независимо от убытка/прибыли в сделках!
Но моя цель не в этом.
Я хочу, чтобы если сделка вошла в зону прибыли, а затем рынок начал разворачиваться обратно, эта функция "Минимальная прибыль" будет гарантировать, что
чтобы сделка была закрыта с желаемой минимальной прибылью.
И здесь я также не хочу, чтобы эта функция влияла на "третью" сделку.
Я пытался написать что-то подобное, но теперь это не работает.
Это не проблема. Символ брокера, на котором я тестирую советника - EURUSD,GBPUSD.....
Если я прикреплю советника к брокеру, где символ EURUSDpro, я просто добавлю 'pro'.
Вы просмотрели мой код?
Функция минимальной прибыли - это 'Failure'.
Она просто закрывает все открытые сделки при каждом исполнении, независимо от убытка/прибыли в сделках!
Но моя цель не в этом.
Я хочу, чтобы если сделка вошла в зону прибыли, а затем рынок начал разворачиваться обратно, эта функция "Минимальная прибыль" будет гарантировать, что
чтобы сделка была закрыта с желаемой минимальной прибылью.
И здесь я также не хочу, чтобы эта функция влияла на "третью" сделку.
Я пытался написать что-то подобное, но теперь это не работает.
Вы слишком усложняете ситуацию, потому что понятия не имеете, как с этим справиться.
Чем больше вы читаете и пытаетесь программировать сами, тем легче становится делать более сложные вещи.
но начинайте с простых вещей, если вы начинаете заставлять программу работать на одной сделке, то потом вы пробуете на большем количестве сделок.
вам придется многому научиться.
Если вы начнете с короткой простой программы и сделаете несколько изменений в ней для тестирования.
вы можете узнать, как работает эта программа.
Ваша проблема, с которой вы начали
Посмотрите, как бы я это сделал
//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| https://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link"https://www.mql4.com"inputdouble TakeProfit =50;
inputdouble Lots =0.1;
inputint MagicNumber =16384;
inputint TakeProfit1 = 15;
inputint TakeProfit2 = 25;
inputint TakeProfit3 = 0;
inputint StopLoss = 100;
inputdouble BreakEven =10;
inputdouble BreakEvenSL =5;
inputdouble TrailingStop =30;
inputdouble TrailingStep =30;
inputint SlippagePips =3;
inputdouble MACDOpenLevel =3.0;
inputdouble MACDCloseLevel=2;
inputint MATrendPeriod =26;
int count,countbuy,countsell;
//++++ These are adjusted for 5 digit brokers.int pips2points; // slippage 3 pips 3=points 30=pointsdouble pips2dbl; // Stoploss 15 pips 0.015 0.0150int Digitspips; // DoubleToStr(dbl/pips2dbl, Digitspips)int Slip;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(Digits % 2 == 1) // DE30=1/JPY=3/EURUSD=5 forum.mql4.com/43064#515262
{pips2dbl = Point*10; pips2points = 10; Digitspips = 1;}
else {pips2dbl = Point; pips2points = 1; Digitspips = 0;}
// OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
Slip = pips2points * SlippagePips; //Slippage //---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//---
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick(void)
{
double MacdCurrent,MacdPrevious;
double SignalCurrent,SignalPrevious;
double MaCurrent,MaPrevious;
int cnt,ticket,total;
//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//---if(Bars<100)
{
Print("bars less than 100");
return;
}
//---if((countbuy>0)||(countsell>0))
{
int CMD;
double SL,TP,price;
int LastError = 0;
RefreshRates();
if (countbuy>0)
{
count=countbuy;
CMD = OP_BUY;
price = Ask;
if(StopLoss>0)SL= price-StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price+TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price+TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price+TakeProfit3*pips2dbl;
}
else
{
count=countsell;
CMD = OP_SELL;
price = Bid;
if(StopLoss>0)SL= price+StopLoss*pips2dbl;
if(count==3 && TakeProfit1>0)TP= price-TakeProfit1*pips2dbl;
if(count==2 && TakeProfit2>0)TP= price-TakeProfit2*pips2dbl;
if(count==1 && TakeProfit3>0)TP= price-TakeProfit3*pips2dbl;
}
ticket=OrderSend(Symbol(), CMD, Lots, price , Slip, SL, TP,"macd sample",MagicNumber,0,Green);
if (ticket>0) //Checking if the order was opened or not
{
OrderPrint();
countbuy--;
countsell--;
}
else {
LastError = GetLastError();
if(CMD==OP_BUY)Print("Error sending buy order "+count+ ". Error code= " + LastError);
if(CMD==OP_SELL)Print("Error sending sell order "+count+ ". Error code= " + LastError);
}
if((countbuy>0)||(countsell>0))return;
}
//--- to simplify the coding and speed up access data are put into internal variables
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
//--- it is important to enter the market correctly, but it is more important to exit it correctly...
total=0;
for(cnt = OrdersTotal()-1; cnt>=0 ; cnt--)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==false)break;
if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)continue;
if(OrderType()<=OP_SELL)// check for opened position
{
total++;
//--- long position is openedif(OrderType()==OP_BUY)
{
//--- should it be closed?if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*pips2dbl))
{
//--- close orderOrderClose(OrderTicket(),OrderLots(),Bid,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(Bid-OrderOpenPrice()>=pips2dbl*BreakEven)
{
if(OrderStopLoss()<OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if(OrderOpenPrice()<OrderStopLoss())
{
if(OrderStopLoss()<Bid-pips2dbl*(TrailingStop+TrailingStep))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Bid-pips2dbl*TrailingStop,OrderTakeProfit(),0,Green);
}
}
}
}
else// go to short position
{
//--- should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*pips2dbl))
{
//--- close order and exitOrderClose(OrderTicket(),OrderLots(),Ask,Slip,Violet);
}
//--- check for breakeven if(BreakEven>0)
{
if(OrderOpenPrice()-Ask>pips2dbl*BreakEven)
{
if(OrderStopLoss()>OrderOpenPrice())
{
//--- modify orderif(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(BreakEvenSL*pips2dbl),OrderTakeProfit(),0,Green);
}
}
}
//--- check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()>OrderStopLoss())&&(OrderStopLoss()>Point))
{
if(OrderStopLoss()>(Ask+pips2dbl*(TrailingStop+TrailingStep)))
{
//--- modify orderOrderModify(OrderTicket(),OrderOpenPrice(),Ask+pips2dbl*TrailingStop,OrderTakeProfit(),0,Red);
}
}
}
}
}
}
if(total<1)
{
countbuy = 0;
countsell = 0;
//--- no opened orders identifiedif(AccountFreeMargin()<(3000*Lots))//3trades*1000
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibilityif(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
MathAbs(MacdCurrent)>(MACDOpenLevel*pips2dbl) && MaCurrent>MaPrevious)
{
countbuy = 3;//we can open
}
//--- check for short position (SELL) possibilityif(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDOpenLevel*pips2dbl) && MaCurrent<MaPrevious)
{
countsell = 3;//we can open
}
}
//---
}
//+------------------------------------------------------------------+
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
OrderComment может быть переписан вашим брокером
вы хотите... Теперь, в соответствии с моим требованием, когда цена будет в прибыли, скажем, 7 пунктов [103.603], стоп лосс
1-ой и 2-ой сделок станет, скажем, 1 пункт прибыли [103.543], а Stop Loss 3-ей сделки останется на уровне 103.386.
сделать extern int BreakEven = 7
(* 10 ) коррекция у 5-значного брокера для получения значения пункта
Ооо, да, это, конечно, недостаток. Вся моя тяжелая работа с вечера теперь напрасна!
Попробовал способ различать сделки в зависимости от функции'order comment' и написал код.
В любом случае, приведенный вами код делает перемещение части Stop Loss на BE или в нужную точку, но все равно моя проблема с "третьей" сделкой не решается.
У меня также есть эта часть кода, перемещающая BE, но я застрял с неперемещающимся SL для третьей сделки.
У меня появилась другая идея, сейчас пробую.
И это было правильно?
string comment_sell="Ордер на продажу";
SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red);
if (OrderComment()=="comment_sell") // ?
Является ли это действительным?
Допустим, я прикрепил советника к графику EURUSD.
if (Order_Symbol()==EURUSD)
Будет ли он сравнивать, является ли текущий график EURUSD или нет?
Вот способ различать заказы с помощью "магического числа".
Брекеты не сбалансированы.
Возможно ли это?
таким образом, вам придется искать 3 разных магических числа
Мне кажется, можно сделать так
Хорошо, после непрерывной напряженной работы (по крайней мере, для меня) советник стал «безошибочным»!
Коротко публикую изменения:
У меня возникла путаница с функцией Set_Magic_Number().
Я правильно его определил? Также при вызове его в других функциях, будет ли он работать правильно?
С уважением
У меня путаница с функцией Set_Magic_Number().
Правильно ли я ее определил? Также при вызове ее в других функциях, будет ли она работать правильно?
С уважением,
Я прочитал здесь, что ваш символ не "EURUSD".
Вы должны использовать правильный символ
Я прочитал здесь, что ваш символ не "EURUSD".
Вы должны использовать правильный символ.
Это не проблема. Символ брокера, на котором я тестирую советника - EURUSD,GBPUSD.....
Если я прикреплю советника к брокеру, у которого символ EURUSDpro, я просто добавлю "pro".
Вы просмотрели мой код?
Функция минимальной прибыли - это 'Failure'.
Она просто закрывает все открытые сделки при каждом исполнении, независимо от убытка/прибыли в сделках!
Но моя цель не в этом.
Я хочу, чтобы если сделка вошла в зону прибыли, а затем рынок начал разворачиваться обратно, эта функция "Минимальная прибыль" будет гарантировать, что
чтобы сделка была закрыта с желаемой минимальной прибылью.
И здесь я также не хочу, чтобы эта функция влияла на "третью" сделку.
Я пытался написать что-то подобное, но теперь это не работает.
Это не проблема. Символ брокера, на котором я тестирую советника - EURUSD,GBPUSD.....
Если я прикреплю советника к брокеру, где символ EURUSDpro, я просто добавлю 'pro'.
Вы просмотрели мой код?
Функция минимальной прибыли - это 'Failure'.
Она просто закрывает все открытые сделки при каждом исполнении, независимо от убытка/прибыли в сделках!
Но моя цель не в этом.
Я хочу, чтобы если сделка вошла в зону прибыли, а затем рынок начал разворачиваться обратно, эта функция "Минимальная прибыль" будет гарантировать, что
чтобы сделка была закрыта с желаемой минимальной прибылью.
И здесь я также не хочу, чтобы эта функция влияла на "третью" сделку.
Я пытался написать что-то подобное, но теперь это не работает.
Вы слишком усложняете ситуацию, потому что понятия не имеете, как с этим справиться.
Чем больше вы читаете и пытаетесь программировать сами, тем легче становится делать более сложные вещи.
но начинайте с простых вещей, если вы начинаете заставлять программу работать на одной сделке, то потом вы пробуете на большем количестве сделок.
вам придется многому научиться.
Если вы начнете с короткой простой программы и сделаете несколько изменений в ней для тестирования.
вы можете узнать, как работает эта программа.
Ваша проблема, с которой вы начали
Посмотрите, как бы я это сделал
не нужны разные входы для Symbol()
3 разных Magicnumbers...
Это не проблема. Символ брокера, на котором я тестирую советника - EURUSD,GBPUSD.....
Если я прикреплю советника к брокеру, где символ EURUSDpro, я просто добавлю 'pro'.
Вы просмотрели мой код?
Функция минимальной прибыли - это 'Failure'.
Она просто закрывает все открытые сделки при каждом исполнении, независимо от убытка/прибыли в сделках!
Но моя цель не в этом.
Я хочу, чтобы если сделка вошла в зону прибыли, а затем рынок начал разворачиваться обратно, эта функция "Минимальная прибыль" обеспечит, чтобы
чтобы сделка была закрыта с желаемой минимальной прибылью.
И здесь я также не хочу, чтобы эта функция влияла на "третью" сделку.
Я пытался написать что-то подобное, но теперь это не работает.
Я скомпилировал ваш код 80 ошибок 6 предупреждений
в основном необъявленный идентификатор
Мне нужен ваш код со всеми объявленными идентификаторами.
если файл слишком большой, то прикрепите
скомпилируйте файл и проверьте ошибки, которые вы получаете