Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 22
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
О! Спасибо. Сам не догадался по утру... Правда всё же проверку на заполнение массивов нужно сделать. В четвёрке не встречал, а в пятёрке частенько не заполняются данные с первого раза из-за нехватки исторических данных.
ЗЫ. Надо больше спать - мысли в ту сторону работать будут.
Ну можно и в цикл поставить
или даже
чтобы скопировано было именно то количество какое затребовано.
ps; Пока я ходил налить чайку, появилась ещё такая мысль, использовать CopyRates() и массив структур MqlRates rates[] но переписывать что-то лениво.
Ну можно и в цикл поставить
или даже
чтобы скопировано было именно то количество какое затребовано.
ps; Пока я ходил налить чайку, появилась ещё такая мысль, использовать CopyRates() и массив структур MqlRates rates[] но переписывать что-то лениво.
доброго времени суток. ручки у меня кривые. помогите пожалуйста добавить проверку стоп лосс для селл (slevel). а то он с ценой в догоняшки играеть.
{
//+--------------------------------------------------------------------+
//| -= stop loss в без убыток =- |
//+--------------------------------------------------------------------+
bool result;
double stop;
int cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}
Логика у вас странная. Но даже если не смотреть на странную логику, то:
Вот здесь у вас для Buy проверяются два условия, а для Sell - всё остальное
else stop=Ask+Point*TS;
Логика у вас странная. Но даже если не смотреть на странную логику, то:
Вот здесь у вас для Buy проверяются два условия, а для Sell - всё остальное
else stop=Ask+Point*TS;
я вот и пытался для Sell прикрутить slevel=OrderStopLoss()>Ask+Point*TS;
но так как в программировании ни бум бум так ничего толкового и не получилось. неделю ковырял форумы. все попытки заканчивались тем что селовский стоп бегает вместе с ценой.
а почему странная логика?) код не полностью мой. переделал как смог
я вот и пытался для Sell прикрутить slevel=OrderStopLoss()>Ask+Point*TS;
но так как в программировании ни бум бум так ничего толкового и не получилось. неделю ковырял форумы. все попытки заканчивались тем что селовский стоп бегает вместе с ценой.
а почему странная логика?) код не полностью мой. переделал как смог
А вы сначала на листочку карандашиком напишите условия, при которых нужно сместить стоп Buy и стоп Sell.
А уже потом, после осмысления написанного, пишите в коде то, что записано на листочке.
А вы сначала на листочку карандашиком напишите условия, при которых нужно сместить стоп Buy и стоп Sell.
А уже потом, после осмысления написанного, пишите в коде то, что записано на листочке.
slevel=OrderStopLoss()>Ask+Point*TS; ну вот оно вроде как для села. или не правильное? я нубоват в этом деле.
Вы вообще понимаете что записано в этом условии? Это же присвоение нуля или единицы переменной с типом double
Что вы хотите этим получить?
Вы вообще понимаете что записано в этом условии? Это же присвоение нуля или единицы переменной с типом double
Что вы хотите этим получить?
вот то что вычитал.
условие проверки - чтобы не двигать SL туда-сюда, а только в одну сторону
Например для BUY-ордера ваша формула
OrderStopLoss()<bid-point*TrailingStop
на этом примере склепал для села
вот то что вычитал.
условие проверки - чтобы не двигать SL туда-сюда, а только в одну сторону
Например для BUY-ордера ваша формула
OrderStopLoss()<bid-point*TrailingStop
на этом примере склепал для села
Так вам нужно так:
по-русски... если стоп ордера меньше чем цена Bid минус размер дистанции трейлингстоп, то ... ваши действия
А вы присваиваете переменной результат этого логического выражения - т.е., либо ноль, либо единицу.
Так вам нужно так:
по-русски... если стоп ордера меньше чем цена Bid минус размер дистанции трейлингстоп, то ... ваши действия
А вы присваиваете переменной результат этого логического выражения - т.е., либо ноль, либо единицу.
я окончательно запутался.
double blevel=OrderStopLoss()<Bid-Point*TS; у меня работает. SL идет за ценой только в прибыль.
double slevel=OrderStopLoss()>Ask+Point*TS; а вот эту вот я не знаю как добавить в else
они у меня не bool вроде.