[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 132
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ИМХО, не сложно, но очень просто "направить" или отправить,
Ну несомненно, проще "отправить" т.е. "послать", чем подсказать. А на самом деле я не спросил ничего такого, чтоб меня в учебник тыкать. Написал в одном месте дубликат правда, но суть не меняется.
Ну наконец уже скажите, что именно хотите сделать... Например: МАшка такая-то движется вверх и она выше МАшки такой-то, при этом цена там-то , ниже/выше МАшки такой-то и если всё это true, то выставить такую-то отложку на таком-то расстоянии. Я вам подскажу примерный алгоритм. А то из кусочков вашего кода, вырванных из контекста, сложно вас направить в нужном направлении. А ведь задачка-то для пятого класса (утрированно)
Вот прилагаю тестовый вариант кода и публикую его тоже в своём посте.
//+-----------------------------------------------------------------------------------+ //| test_Ma.mq4 | //| hoz | //| | //+-----------------------------------------------------------------------------------+ #property copyright "hoz" #property link "" extern string ___H0 = " ___________ Параметры МА ____________ "; extern int i_TF = 0, i_fastMaPeriod = 10, i_slowMaPeriod = 21; extern string ___H1 = " _____ Параметры ордера _______"; extern int i_magic = 3333021; extern double i_thresholdFromMa = 5; // Отступ от МА // Машечки double fastMa, slowMa; double pt; // Переменные рыночного окружения double g_spread, g_stopLevel, g_tickSize; // Идентификаторы положений машек #define MA_DIRECT_TO_UP 0 // Машки направлены вверх #define MA_DIRECT_TO_DOWN 1 // Машки направлены вниз #define MA_DIRECT_TO_NONE -1 // Машки во флете #define SIGNAL_BUY 0 // Сигнал на покупку #define SIGNAL_SELL 1 // Сигнал на продажу #define SIGNAL_NO -1 // Сигнала нет //+-------------------------------------------------------------------------------------+ //| Функция иницилизации | //+-------------------------------------------------------------------------------------+ int init() { GetMarketInfo(); if (Digits == 2 || Digits == 4) pt = Point; if (Digits == 1 || Digits == 3 || Digits == 5) pt = Point * 10; if (Digits == 6) pt = Point * 100; if (Digits == 7) pt = Point * 1000; return (0); } //+-------------------------------------------------------------------------------------+ //| Функция деиницилизации | //+-------------------------------------------------------------------------------------+ int deinit() { //---- //---- return (0); } //+-------------------------------------------------------------------------------------+ //| Сбор рыночных данных | //+-------------------------------------------------------------------------------------+ void GetMarketInfo() { g_spread = MarketInfo(Symbol(),MODE_SPREAD); g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE); } //+-------------------------------------------------------------------------------------+ //| Функция нормализации | //+-------------------------------------------------------------------------------------+ double ND(double A) { return (NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy(double fastMa, double slowMa) { int ticket = -1; if ((fastMa + i_thresholdFromMa * pt) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0) return (true); } //+-------------------------------------------------------------------------------------+ //| Открытие короткой позиции | //+-------------------------------------------------------------------------------------+ bool OpenSell(double fastMa, double slowMa) { int ticket = -1; if ((fastMa - i_thresholdFromMa * pt) < Bid) // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0); if (ticket > 0) return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем относительное положение машек | //+-------------------------------------------------------------------------------------+ int GetStateMa(double fastMa, double slowMa) { if (fastMa > slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_UP); // ..машки направлены вниз if (fastMa < slowMa) // Если условия выполнены, то.. return (MA_DIRECT_TO_DOWN); // машки направлены вверх return (MA_DIRECT_TO_NONE); // Машки не имеют выраженного направления } //+-------------------------------------------------------------------------------------+ //| Открытие позиций | //+-------------------------------------------------------------------------------------+ bool Trade(int signal) { if (signal == SIGNAL_BUY) // Если сигнал на покупку.. if (!OpenBuy(fastMa, slowMa)) // ..покупаем return(false); if (signal == SIGNAL_SELL) // Если сигнал на продажу.. if (!OpenSell(fastMa, slowMa)) // ..продаём return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP) // Если машки указывают вверх.. if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa.. return(SIGNAL_BUY); // ..функция возвращает сигнал покупки if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN) // Если машки указывают вниз.. if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa.. return(SIGNAL_SELL); // ..функция возвращает сигнал продажи return (SIGNAL_NO); } //+-------------------------------------------------------------------------------------+ //| Функция start | //+-------------------------------------------------------------------------------------+ int start() { fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1); slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1); // Отслеживание открытия нового бара static datetime lastBarTime = 0; // Время проведения последних рассчётов if (lastBarTime == iTime(NULL, 0, 0)) // На текущем баре все необходимые действия.. return (0); // ..уже были выполнены // Рассчёт сигнала int signal = GetSignal(); // Проведение торговых операций if (signal != SIGNAL_NO) if (!Trade(signal)) return (0); lastBarTime = iTime(NULL, 0, 0); // На текущем баре все необходимые действия.. // .. успешно выполнены return (0); }В условиях чётко сказано, что цена отложки находится выше(ниже) значения МА+(-) отступ от МА.
Вот оно:
Сигнал должен рассчитываться только тогда, когда цена попала в зону "зазора" МА +(-) отступ.
В функции покупки, например:
Покупка должна быть выше fastMa на i_thresholdFromMa * pt.
По факту она не там. То ли косяк в языке, то ли в машке дело. Как можно ещё объяснить то что мне нужно? Я привёл целый код без дополнительных условий и функций (только один сигнал голый и открытие).Написано уже всё чётко (для тестера, проверок не делал под реал никаких!)
Вот как открывает:
По поводу выделенного: работайте по ценам открытия, тогда не будет перерисовки МАшек на нулевом баре
У меня такой вопрос - если я использую при формулировке торговых критериев скользящую среднюю со сдвигом вправо - то есть значение сдвига положительное.
То тогда при формировании сигнала нужно использовать значение скользящей средне не на нулевом или первом баре, а на баре с индексом соответствующем величине сдвига. правильно я думаю или нет.
Необходимо определять флаг начала например четвертой пятиминутки каждого часа в индикаторе.
У меня такой вопрос - если я использую при формулировке торговых критериев скользящую среднюю со сдвигом вправо - то есть значение сдвига положительное.
То тогда при формировании сигнала нужно использовать значение скользящей средне не на нулевом или первом баре, а на баре с индексом соответствующем величине сдвига. правильно я думаю или нет.
Накинь на график среднюю и погляди какой индекс тебе нужен. Тут визуально то видно.
Ну несомненно, проще "отправить" т.е. "послать", чем подсказать. А на самом деле я не спросил ничего такого, чтоб меня в учебник тыкать. Написал в одном месте дубликат правда, но суть не меняется.
Вот прилагаю тестовый вариант кода и публикую его тоже в своём посте.
В условиях чётко сказано, что цена отложки находится выше(ниже) значения МА+(-) отступ от МА.
Вот оно:
Сигнал должен рассчитываться только тогда, когда цена попала в зону "зазора" МА +(-) отступ.
В функции покупки, например:
Покупка должна быть выше fastMa на i_thresholdFromMa * pt.
По факту она не там. То ли косяк в языке, то ли в машке дело. Как можно ещё объяснить то что мне нужно? Я привёл целый код без дополнительных условий и функций (только один сигнал голый и открытие).Написано уже всё чётко (для тестера, проверок не делал под реал никаких!)
Вот как открывает:
Я специально сделал условие по 1-ый бар, чтоб не было никаких непоняток. Главное хоть как запустить...например: хочу выставить отложку выше/ниже МАшки на такую-то дистанцию при условии, что ... тыры-пыры-ё-моё ...
Второй раз прошу пояснить, неужели сложно? Уже б давно решили вашу проблему.
Доброго времени суток.
Подскажите как бороться с ГЭПами в советниках?
Часто возникают ГЭПы в период перехода через выходные, и после их возникновения работа с ордерами зависает, как это исправить, за ранее спасибо!
Артём, как Вы думаете, что будет быстрее работать, выражение с MathMax'ами или с if?
Не объяснил словами, т.к. ясно, что это выражение служит мне избегнуть ошибок 130, и прекрасно служит!
Благодарю заранее!
Накинь на график среднюю и погляди какой индекс тебе нужен. Тут визуально то видно.
накинул. ответ не совсем мне понятен поэтому переспрошу еще раз. Я правильно вас понял что при формулировке торговых условий надо
надо использовать значение МА на соответствующее количество баров назад но не то значение которое помечено на рисунке желтой стрелкой.
Рисунок нарисовал так как понял ваш ответ.