Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Portanto, não há necessidade de definir uma proporção exata de cotonetes para barras. Você só pode considerar esfregaços com cotonetes e é melhor usá-los como filtros em vez de sinais.
Boris, Você está parcialmente certo. Basicamente, as luneta são um ponteiro. Mais uma vez, porém, há aqui algumas opções. Alguns estão procurando entrar em uma contra tendência e outros estão procurando seguir a tendência. Há muitas variações, mas elas ainda não funcionaram realmente :(
Boris, você está parcialmente certo. Basicamente, os vagões são um ponteiro. Mais uma vez, no entanto, há uma série de opções aqui. Alguns procuram entrar em uma tendência contrária, outros entram em uma tendência... Há muitas variações, mas elas ainda não funcionaram como esperado :(
A questão não é ser triste, nem para os outros. O resultado final é que há um bug e o suporte não está respondendo de forma alguma! Eles não se importam realmente com os clientes. Estou muito curioso sobre isso. O pedido está pendente há quase uma semana e não há nenhuma reação... Não sei o que fazer com ele... Talvez você possa pegar um vídeo e mostrar o preço na barra atual e os cortes de tara através dele, mas não há ordens pendentes... Sim, eu me apeguei a este momento, mas apenas para entender a razão. Na segunda-feira vou colocá-lo à prova na Demo, mas... Mas, novamente... se o testador é totalmente defeituoso, de que servirá?
... Talvez um vídeo e mostrar como vai o preço e na barra atual, o alcatrão corta através da máquina...
Eu não tinha isto com Mashka.
Qual Mashka?
Eu escrevi especificamente em que casos. Por que você está tentando fazer isso a seu respeito? Esta linha já tem 9 páginas, mas ainda está lá.
Estou anexando o código. Aqui está o mesmo código para visualização:
//+-----------------------------------------------------------------------------------+ //| 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); }ALGUMAS BARRAS SÃO FLAGRANTEMENTE IGNORADAS SEM NENHUMA RAZÃO. E, é claro, não há ordens pendentes sobre eles. O código está correto. Até onde posso ver, não há nada para consertar.
Aqui estão as screenshots mostrando posições que não foram abertas. As datas dos testes também são visíveis ali. Por favor, ajude-me a encontrar a razão. Já discuti tudo o que estava na linha, mas não a questão original.
Se você não se importa de formular o ToR novamente, por que você precisa controlar um novo bar?
Vou resumir! Há mais uma coisa em que ainda não pensei, mas vou lhe dar a idéia completa.
Não deve haver nenhum limite para o número de pedidos. Ou seja, as ordens podem ser abertas em qualquer quantidade. ... não importa quantos temos, mas precisamos apenas de 1 ordem para sermos abertos no bar atual. É isso aí.
Ou seja, um novo bar se abre, de modo que podemos abrir 1 ordem durante este bar, mas não mais que 1 ordem no bar atual. O próximo pedido pode ser aberto somente no próximo bar, não mais cedo.
Isso está claro agora?
E aqui você está errado...
Os períodos das ondas são diferentes...i_fastMaPeriod ei_slowMaPeriod são 10 e 21 respectivamente!
Leitura recomendada
https://www.mql5.com/ru/articles/1411
Eu faço e é fácil! Não pensei em mais uma coisa, mas vou lhe dar a idéia completa.
Não deve haver nenhum limite para o número de pedidos. Isto é, as encomendas podem ser abertas em qualquer quantidade. Não importa quantos são, mas apenas 1 ordem deve ser aberta no bar atual. É isso aí.
Ou seja, um novo bar se abre, de modo que podemos abrir 1 ordem durante este bar, mas não mais que 1 ordem no bar atual. O próximo pedido pode ser aberto somente no próximo bar, não mais cedo.
Isso está claro agora?
Mantenha que em cada barra somente uma posição é aberta
manter apenas uma posição aberta em cada bar
Vou deixar isso claro e fácil! Ainda não pensei em mais uma coisa, mas vou lhe dar a idéia completa.
Não deve haver nenhum limite para o número de pedidos. Isto é, as encomendas podem ser abertas em qualquer quantidade. Não importa quantos são, mas apenas 1 ordem deve ser aberta no bar atual. É isso aí.
Ou seja, um novo bar se abre, de modo que podemos abrir 1 ordem durante este bar, mas não mais que 1 ordem no bar atual. O próximo pedido só pode ser aberto no próximo bar, não antes.
Podemos abrir a ordem na barra atual somente se ela for aberta. ou seja, devemos mover esta linha na função OpenBuy/Sell