Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Поэтому не нужно устанавливать точное отношение машек с барами. Можно только рассматривать машки с машками и лучше их использовать как фильтры, а не как сигналы.
Борис, Ты отчасти прав. В основном, машки это указатель. Хотя тут опять же есть несколько вариантов. КТо-то ищёт где войти в контртренд, а кто-то и по тренду.. Вариаций много, НО они пока что ещё не заработали как нужно :(
Борис, Ты отчасти прав. В основном, машки это указатель. Хотя тут опять же есть несколько вариантов. КТо-то ищёт где войти в контртренд, а кто-то и по тренду.. Вариаций много, НО они пока что ещё не заработали как нужно :(
Да суть то не в грусти, и не в других. Суть в том, что баг есть, и поддержка не отвечает вообще! Неужели им плевать на клиентов. Мне это очень даже интересно. Заявка висит уже неделю почти, и реакции вообще ноль... Может виде снять и показать как цена идёт и на текущем баре, тар просекает машку на сквозь, а отложки нет? Да я прицепился к этому моменту, НО только с тем лишь замыслом, чтоб понять причину. С понедельника поставлю на тест на демо, но... опять же.. если тестер глючный совсем, то нафиг он тогда такой нужен?
... Может виде снять и показать как цена идёт и на текущем баре, тар просекает машку на сквозь ...
Не было у меня этого с Машкой.
С какой Машкой?
Я же канкретно писал в каких случаях. Зачем тогда переводить на себя? Ветка уже на 9 страниц, а "воз и ныне там".
Прикрепляю код. Вот тот же код для просмотра:
//+-----------------------------------------------------------------------------------+ //| 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; // Отступ от МА extern double buyHear = 10, // Расстояние от МА до отложки на бай SellHear = 10; // Расстояние от МА до отложки на шорт // Машечки double fastMa, slowMa; double pt; datetime lastBarTime; // Время проведения последних рассчётов // Переменные рыночного окружения 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(); lastBarTime = 0; 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) * pt; g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL) * pt; g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE) * pt; } //+-------------------------------------------------------------------------------------+ //| Функция нормализации | //+-------------------------------------------------------------------------------------+ double ND(double A) { return (NormalizeDouble(A, Digits)); } //+-------------------------------------------------------------------------------------+ //| Открытие длинной позиции | //+-------------------------------------------------------------------------------------+ bool OpenBuy() { int ticket = -1; double OOP = fastMa + buyHear * pt; // Получаем значение цны открытия if ((ND(OOP) - Ask) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) > Ask) // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Открытие короткой позиции | //+-------------------------------------------------------------------------------------+ bool OpenSell() { int ticket = -1; double OOP = fastMa - SellHear * pt; // Получаем значение цны открытия if ((Bid - ND(OOP)) >= MathMax(g_stopLevel,g_spread)) // Проверка цену открытия на стоплевел { if (ND(OOP) < Bid) // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником { Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("fastMa + i_thresholdFromMa * pt = ", fastMa + i_thresholdFromMa * pt); Print("Цена покупки = ", fastMa + buyHear * pt); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(OOP), 3, 0, 0, NULL, i_magic, 0); } } if (ticket > 0) { return (true); } else Alert (GetLastError()); } //+-------------------------------------------------------------------------------------+ //| Получаем относительное положение машек | //+-------------------------------------------------------------------------------------+ 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()) // ..покупаем return(false); if (signal == SIGNAL_SELL) // Если сигнал на продажу.. if (!OpenSell()) // ..продаём return(false); return (true); } //+-------------------------------------------------------------------------------------+ //| Получаем общий сигнал на открытие позиции | //+-------------------------------------------------------------------------------------+ int GetSignal() { // if (FindOrders() > 0) // Если есть открытые ордера, то.. // return (SIGNAL_NO); //..ничего не делаем if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP) if ( ND(MathAbs(fastMa - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa.. return(SIGNAL_BUY); if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN) if ( ND(MathAbs(fastMa - Bid)) <= 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_OPEN,0); slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_OPEN,0); /* Print("Bid = ", Bid); Print("Ask = ", Ask); Print("fastMa = ", fastMa); Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt); */ // Отслеживание открытия нового бара 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); }НЕКОТОРЫЕ БАРЫ НАГЛО ИГНОРИРУЮТСЯ БЕЗПРИЧИННО. И естесственно отложки на них не ставятся. Код верный. Исправить уже нечего как я вижу.
Вот скрины, на которых видно, где позиции не открылись. Так же там видны и даты тестирования. Просьба помочь найти в чём причина. А то обсуждалось в ветке уже всё, но не исходный вопрос.
если не трудно сформулируйте ТЗ еще раз , зачем вам контроль нового бара?
Сформулирую и легко! Ещё 1 момент я не додумал, НО суть изложу целиком.
Нужно, что б ограничений по количеству ордеров не было вообще. Т.е. ордера могут открываться в любом количестве... не важно сколько их будет, НО в текущем баре нужно, чтоб открывался только 1 ордер. Вот так вот.
Т.е. открылся новый бар, значит можно в течении этого бара открыть 1 ордер, НО не более 1 ордера в текущем баре. Следующий ордер можно открыть только на следующем баре, не раньше..
Так понятно теперь?
А здесь Вы не правы...
Периоды машек разные... i_fastMaPeriod и i_slowMaPeriod соответственно равны 10 и 21!
Рекомендуется к прочтению
https://www.mql5.com/ru/articles/1411
Сформулирую и легко! Ещё 1 момент я не додумал, НО суть изложу целиком.
Нужно, что б ограничений по количеству ордеров не было вообще. Т.е. ордера могут открываться в любом количестве... не важно сколько их будет, НО в текущем баре нужно, чтоб открывался только 1 ордер. Вот так вот.
Т.е. открылся новый бар, значит можно в течении этого бара открыть 1 ордер, НО не более 1 ордера в текущем баре. Следующий ордер можно открыть только на следующем баре, не раньше..
Так понятно теперь?
держи на каждом баре открывается только одна позиция
держи на каждом баре открывается только одна позиция
Сформулирую и легко! Ещё 1 момент я не додумал, НО суть изложу целиком.
Нужно, что б ограничений по количеству ордеров не было вообще. Т.е. ордера могут открываться в любом количестве... не важно сколько их будет, НО в текущем баре нужно, чтоб открывался только 1 ордер. Вот так вот.
Т.е. открылся новый бар, значит можно в течении этого бара открыть 1 ордер, НО не более 1 ордера в текущем баре. Следующий ордер можно открыть только на следующем баре, не раньше..
только при условии, открытия ордера на текущем баре. т.е. эту строчку в функции OpenBuy/Sell перенести