Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Por lo tanto, no es necesario establecer una relación exacta entre los hisopos y las barras. Sólo se puede considerar a los hisopos con hisopos y es mejor usarlos como filtros en lugar de señales.
Boris, tienes parte de razón. Básicamente los biseles son un puntero. De nuevo, sin embargo, hay algunas opciones aquí. Algunos buscan entrar en una contra-tendencia y otros buscan seguir la tendencia. Hay un montón de variaciones, pero no han funcionado todavía :(
Boris, en parte tienes razón. Básicamente, los vagones son un puntero. De nuevo, sin embargo, hay varias opciones aquí. Algunos buscan entrar en una contra-tendencia, y otros entran en una tendencia... Hay muchas variaciones, pero aún no han funcionado como se esperaba :(
No se trata de estar triste, ni de los demás. La conclusión es que hay un error y el soporte no responde en absoluto. No se preocupan realmente por los clientes. Tengo mucha curiosidad por saberlo. La solicitud está pendiente desde hace casi una semana, y no hay ninguna reacción... No sé qué hacer con él... ¿Tal vez se pueda tomar un video y mostrar el precio en la barra actual y la tara la corta, pero no hay órdenes pendientes? Sí, lo hice, pero sólo lo hice para entender la razón. Lo pondré a prueba en la Demo el lunes, pero... Pero, de nuevo... si el probador es totalmente defectuoso, ¿de qué servirá?
... Tal vez un video y mostrar cómo el precio va y en la barra actual, el alquitrán corta a través de la mach...
No lo tuve con Mashka.
¿Qué Mashka?
Escribí específicamente en qué casos. ¿Por qué tratas de hacerlo sobre ti? Este hilo ya tiene 9 páginas, pero sigue ahí.
Adjunto el código. Aquí está el mismo código para verlo:
//+-----------------------------------------------------------------------------------+ //| 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); }ALGUNOS BARES SON IGNORADOS DESCARADAMENTE SIN NINGUNA RAZÓN. Y por supuesto, no hay órdenes pendientes sobre ellos. El código es correcto. No hay nada que arreglar por lo que veo.
Aquí hay capturas de pantalla que muestran las posiciones que no se han abierto. Allí también se pueden ver las fechas de las pruebas. Por favor, ayúdenme a encontrar la razón. Ya he comentado todo en el hilo, pero no la pregunta original.
Si no le importa formular de nuevo los TdR, ¿por qué necesita controlar un nuevo bar?
Lo diré en pocas palabras. Hay una cosa más en la que no he pensado, pero le daré todo el punto.
No debería haber ningún límite en el número de pedidos. Es decir, los pedidos pueden abrirse en cualquier cantidad... ... no importa cuántas tengamos, pero necesitamos que se abra sólo 1 orden en la barra actual. Eso es todo.
Es decir, se abre una nueva barra, por lo que podemos abrir 1 orden durante esta barra, pero no más de 1 orden en la barra actual. La siguiente orden sólo puede abrirse en la siguiente barra, no antes.
¿Está claro ahora?
Y aquí te equivocas...
¡Los periodos de las ondas son diferentes...i_fastMaPeriod yi_slowMaPeriod son 10 y 21 respectivamente!
Lecturas recomendadas
https://www.mql5.com/ru/articles/1411
Yo lo hago y es fácil. No he pensado en 1 cosa más, pero te daré la idea completa.
No debería haber ningún límite en el número de pedidos. Es decir, los pedidos pueden abrirse en cualquier cantidad... No importa cuántas sean, pero sólo debe abrirse 1 orden en la barra actual. Eso es todo.
Es decir, se abre una nueva barra, por lo que podemos abrir 1 orden durante esta barra, pero no más de 1 orden en la barra actual. La siguiente orden sólo puede abrirse en la siguiente barra, no antes.
¿Está claro ahora?
Mantenga que en cada barra sólo se abre una posición
mantener sólo una posición abierta en cada barra
¡Lo haré claro y fácil! Todavía no he pensado en 1 cosa más, pero te daré la idea completa.
No debería haber ningún límite en el número de pedidos. Es decir, los pedidos pueden abrirse en cualquier cantidad... No importa cuántas sean, pero sólo debe abrirse 1 orden en la barra actual. Eso es todo.
Es decir, se abre una nueva barra, por lo que podemos abrir 1 orden durante esta barra, pero no más de 1 orden en la barra actual. La siguiente orden sólo puede abrirse en la siguiente barra, no antes.
Podemos abrir la orden en la barra actual sólo si está abierta, es decir, debemos mover esta línea en la función OpenBuy/Sell