[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 132
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
IMHO, não é complicado, mas muito fácil de "dirigir" ou enviar,
Bem, é certamente mais fácil "enviar", ou seja, "enviar" do que sugerir. E na verdade, eu não pedi nada para me meter em um livro didático. Escreveu um duplicado em um só lugar, é verdade, mas a essência não muda.
Finalmente, diga-me exatamente o que você quer fazer... Por exemplo: o MAA mais ou menos está subindo e está acima do MAA mais ou menos e o preço está em algum ponto abaixo/abaixo do MAA mais ou menos e se for verdade, então coloque um pedido pendente a alguma distância. Vou lhe dar um algoritmo rudimentar. Porque é difícil direcioná-lo na direção certa, quando seus fragmentos de código são arrancados do contexto. Afinal, a tarefa é para a quinta série (exageradamente)
Aqui estou anexando uma versão de teste do código e publicando-a em meu post também.
//+-----------------------------------------------------------------------------------+ //| 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); }As condições dizem claramente que o preço do pedido está acima (abaixo) do MA+(-) compensado do MA.
Aqui está:
O sinal só deve ser calculado quando o preço estiver naárea de "intervalo" do travessão MA +(-).
Em uma função de compra, por exemplo:
Comprar deve estar acima dofastMa pori_thresholdFromMa * pt.
Na verdade, não está lá. Ou é uma falha no idioma ou é um bug na ondulação. De que outra forma posso explicar o que eu preciso? Eu dei todo o código sem condições e funções adicionais (apenas um sinal nu e aberto).Já está escrito claramente(para um testador, eu não o verifiquei de verdade!)
Eis como se abre:
Em relaçãoao destacado: trabalho sobre os preços abertos, então não haverá um redesenho dos MAs na barra zero
Tenho uma pergunta - se eu usar uma média móvel com um deslocamento para a direita ao formular meus critérios comerciais - ou seja, o valor do deslocamento é positivo.
Então, ao formar o sinal não devo usar o valor da média móvel no zero ou na primeira barra, mas na barra com o índice correspondente ao valor do turno.
A bandeira de início de, por exemplo, os quatro cinco minutos de cada hora deve ser definida no indicador.
Tenho uma pergunta - se eu usar uma média móvel com um deslocamento para a direita quando eu formular meus critérios comerciais - ou seja, o valor do deslocamento é positivo.
Então, ao formar o sinal não devo usar o valor da média móvel no zero ou na primeira barra, mas na barra com o índice correspondente ao valor do turno.
Coloque a média móvel na tabela e veja qual índice você precisa. Você pode vê-lo visualmente.
Bem, sem dúvida é mais fácil "enviar", ou seja, "enviar" do que sugerir. Na verdade, eu não pedi nada para me espetar em um livro didático. Escrevi um duplicado em um só lugar, mas a essência não muda.
Aqui eu estou anexando a variante de código de teste e estou publicando-a em meu post também.
As condições dizem claramente que o preço do pedido está acima (abaixo) do MA+(-) compensado do MA.
Aqui está:
O sinal só deve ser calculado quando o preço estiver naárea de "intervalo" do travessão MA +(-).
Em uma função de compra, por exemplo:
Comprar deve estar acima dofastMa pori_thresholdFromMa * pt.
Na verdade, ele não está lá. Ou é um bug na minha língua ou é um bug no meu mouse. De que outra forma posso explicar o que eu preciso? Eu dei um código inteiro sem condições e funções adicionais (apenas um sinal nu e abertura).Já está escrito claramente(para um testador, eu não o verifiquei de verdade!)
Eis como se abre:
Fiz uma condição especial no 1º bar, para que não houvesse confusão. O principal é como executá-lo...
Por exemplo: eu quero colocar um pedido pendente acima/abaixo de um MA a uma distância de ... bah, bah, bah, bah, bah, bah, bah ...
Pela segunda vez, por favor explique, é tão difícil? Teríamos resolvido seu problema há muito tempo.
Boa tarde.
Você pode aconselhar como lidar com os GAPs nos EAs?
Muitas vezes recebo GEPs durante o fim de semana, e depois que eles ocorrem o trabalho com os pedidos pendurados, como consertá-los, obrigado de antemão!
Artyom, o que você acha que funcionará mais rápido, expressão com MathMax ou com se?
Não expliquei em palavras, porque é claro que esta expressão me serve para evitar erros 130, e me serve perfeitamente!
Obrigado de antemão!
Coloque a média na tabela e veja qual índice você precisa. Você pode vê-lo visualmente.
Eu entendi. Não entendi bem sua resposta, então vou lhe perguntar novamente. Eu entendi corretamente que ao formular as condições comerciais
Você deve usar o valor MA para o número correspondente de barras para trás, mas não o valor marcado com uma seta amarela na figura.
Eu desenhei a figura como entendi sua resposta.