- Проблема со стохастиком - не поддается контролю(((
- Проблемы с советником
- FOREX - Тенденции, прогнозы и следствия 2016
double MA = iMA(...); // значение МА'шки
double GoodDelta= 0.01; // допустимая погрешность между ценой и МА'шкой;
Lot= 0.1; //лот, которым хотим открыться
int Ticket = 0; // тикет будущего открытого ордера
double SL = 0; // уровень цены Stop Loss (может быть равно 0). значение должно быть нормализовано (т.е чтобы было не больше знаков после запятой, чем Digits)
double TP = 0; // уровень цены Take Profit (может быть равно 0). значение должно быть нормализовано (т.е чтобы было не больше знаков после запятой, чем Digits)
int Slipp = 0; // максимальное проскальзывание цены (в пунктах), 0 = не учитывать
bool NeedToBuy = true; // хотим открыть Buy
bool GoodToBuy = MathAbs(Ask - MA) < GoodDelta; // подходящая ли цена для Buy ?
bool GoodToSell = MathAbs(Bid - MA) < GoodDelta; // подходящая ли цена для Sell ?
bool GoodPrice = (GoodToBuy) || (GoodToSell); // флаг, что будем пытаться открыться (цена подходит или для Buy, или для Sell)
if (NeedToBuy) { if (GoodToBuy) Ticket = OrderSend(Symbol, OP_BUY, Lot, Ask, Slipp, SL, TP);} // еще можно добавить комментарий к ордеру, магик и цвет, см. описание OrderSend()
else { if (GoodToSell) Ticket = OrderSend(Symbol, OP_SELL, Lot, Bid, Slipp, SL, TP);}
if (GoodPrice && Ticket<1) { } // если должны были открыться, но не открылись - получаем код ошибки и разруливаем ситуацию в зависимости от ошибки.
Код схематичный. Уже надо знать куда открываться и проверять не открылись ли уже на предыдущих тиках/барах.
PS: камрады, чего код не раскрасился?
double MA = iMA(...); // значение МА'шки
double GoodDelta= 0.01; // допустимая погрешность между ценой и МА'шкой;
Lot= 0.1; //лот, которым хотим открыться
int Ticket = 0; // тикет будущего открытого ордера
double SL = 0; // уровень цены Stop Loss (может быть равно 0). значение должно быть нормализовано (т.е чтобы было не больше знаков после запятой, чем Digits)
double TP = 0; // уровень цены Take Profit (может быть равно 0). значение должно быть нормализовано (т.е чтобы было не больше знаков после запятой, чем Digits)
int Slipp = 0; // максимальное проскальзывание цены (в пунктах), 0 = не учитывать
bool NeedToBuy = true; // хотим открыть Buy
bool GoodToBuy = MathAbs(Ask - MA) < GoodDelta; // подходящая ли цена для Buy ?
bool GoodToSell = MathAbs(Bid - MA) < GoodDelta; // подходящая ли цена для Sell ?
bool GoodPrice = (GoodToBuy) || (GoodToSell); // флаг, что будем пытаться открыться (цена подходит или для Buy, или для Sell)
if (NeedToBuy) { if (GoodToBuy) Ticket = OrderSend(Symbol, OP_BUY, Lot, Ask, Slipp, SL, TP);} // еще можно добавить комментарий к ордеру, магик и цвет, см. описание OrderSend()
else { if (GoodToSell) Ticket = OrderSend(Symbol, OP_SELL, Lot, Bid, Slipp, SL, TP);}
if (GoodPrice && Ticket<1) { } // если должны были открыться, но не открылись - получаем код ошибки и разруливаем ситуацию в зависимости от ошибки.
Код схематичный. Уже надо знать куда открываться и проверять не открылись ли уже на предыдущих тиках/барах.
PS: камрады, чего код не раскрасился?
В учебнике есть готовый робот - правьте условия и всё. Код надо ставить грамотно. Попробуйте ещё раз... :-)
//--------------------------------------------------------------- 4 -- // Параметры технич. индикат: M_0=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,0); // 0 бар M_1=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_MAIN,1); // 1 бар S_0=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);//0 бар S_1=iMACD(Sym,PERIOD_H1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);//1 бар St_M_0=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_MAIN, 0); St_M_1=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_MAIN, 1); St_S_0=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_SIGNAL,0); St_S_1=iStochastic(Sym,PERIOD_M15,5,3,3,MODE_SMA,0,MODE_SIGNAL,1); //--------------------------------------------------------------- 5 -- // Вычисление торговых критериев if(M_0>S_0 && -M_0>Opn && St_M_0>St_S_0 && St_S_0<St_min) return(10); // Открытие Buy if(M_0<S_0 && M_0>Opn && St_M_0<St_S_0 && St_S_0>St_max) return(20); // Открытие Sell if(M_0<S_0 && M_0>Cls && St_M_0<St_S_0 && St_S_0>St_max) return(11); // Закрытие Buy if(M_0>S_0 && -M_0>Cls && St_M_0>St_S_0 && St_S_0<St_min) return(21); // Закрытие Sell //--------------------------------------------------------------- 6 --
Я бы переписал по-другому 3 строки:
int GoodDelta = 100; // допустимая погрешность между ценой и МА'шкой в пунктах (для пятизнака); bool GoodToBuy = MathAbs(Ask - MA) < NormalizeDouble (GoodDelta * Point, Digits); // подходящая ли цена для Buy ? bool GoodToSell = MathAbs(Bid - MA) < NormalizeDouble (GoodDelta * Point, Digits);; // подходящая ли цена для Sell ?
Задавать погрешность в абсолютных единицах - плохое решение.
0.01 (пятизнак) - для йеновых пар - это 10 пунктов, а для, например, eurusd - это уже 1000 (!) пунктов.
Задавать погрешность в абсолютных единицах - плохое решение.
0.01 (пятизнак) - для йеновых пар - это 10 пунктов, а для, например, eurusd - это уже 1000 (!) пунктов.
Плохое решение для примера или для готовой ТС ?
Т.е., что погрешность у меня задана жесткая это неправильно, а что все остальные переменные заданы жестко - это нормально ?
Нормально, что именно true задано для NeedToBuy ? Хотя должен быть целый блок кода, который решает куда открываться....
И Lot я в примере фиксированным задал...
И проверять надо, что SL (которые тоже в пункты пересчитать надо бы, как и TP) пытаемся поставить не ближе, чем STOPLEVEL. И проверять хватит ли AccountFreeMargin(), если SL==0.
Но для схемы "как открыться по рынку" - нормуль.
Да тут все параметры OrderSend() расчитываться должны. Вы только не путайте схему "как открыться по рынку" с законченным решением с расчетом лота, направления куда открываться, проверкой расстояние до стопов и пр.
Предполагается, что трейдер, открывающий сделку, понимает эти нюансы и сам задаст/расчитает правильную погрешность для его ТС.
А если бы я не присвоил переменным значения, то во что превратился бы OrderSend() из моего примера? В цитирование документации?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования