Deixei de fora o parâmetro"comprimento do padrão " para especificar o comprimento para o padrão numérico (este parâmetro é usado apenas para o modo de otimização).
#property version"1.003"#property description"Bull candle - \"1\", bear candle - \"0\""//---#include <Trade\Trade.mqh>
CTrade m_trade; // trading object//+------------------------------------------------------------------+//| Enum pattern type: numerical or string |//+------------------------------------------------------------------+enum ENUM_PATTERN_TYPE
{
PATTERN_TYPE_NUMERICAL=0, // numerical
PATTERN_TYPE_STRING=1, // string
};
//---input ENUM_PATTERN_TYPE InpPatternType = PATTERN_TYPE_STRING; // pattern typeinputuchar InpLenNumerical = 3; // length of the pattern (use only if pattern "numerical")inputstring InpsMorseCode = "101"; // string Morse code (max 5 characters)inputENUM_POSITION_TYPE InpPosType = POSITION_TYPE_BUY; // posinion typeinputdouble InpLot = 0.1; // lotsinputulong m_magic = 88430400; // magic numberinputulong m_slippage = 30; // slippage//---string sExtMorseCode="";
int max_string_len=5; // limitation of the length of the pattern "string"int i_morse_code=0; // int Morse code (use only if pattern type=numerical)//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//---if(InpPatternType==PATTERN_TYPE_STRING)
{
//--- check start modeif(MQLInfoInteger(MQL_OPTIMIZATION))
return(INIT_PARAMETERS_INCORRECT);//--- info printPrint("The type of the pattern \"string\" is set - the parameters \"pattern length\" and \"int Morse code\" are ignored");
sExtMorseCode=InpsMorseCode;
E uma rápida defesa - se você selecionar um tipo de padrão de string no modo de otimização, o Expert Advisor retornará "INIT_PARAMETERS_INCORRECT".
Você tem que pensar em tudo imediatamente, para que não tenha que refazê-lo mais tarde.
....
Mais uma vez, se voltarmos ao padrão "Estrela da Noite", ele pode ser visto como uma tomada de controle de um pequeno touro e uma tomada de controle de um grande touro. Isso significa que temos um padrão composto que consiste em uma vela em alta e uma absorção em baixa. E se somarmos os três castiçais a partir do padrão, obtemos novamente uma barra de pino.
Deixe-me inserir meu kopeck de 5 kopeck.
Esta tarefa não foi definida e é impossível prever tudo de uma só vez. Neste caso, o conceito inicial que foi planejado como básico será perdido: um usuário constrói a seqüência de castiçais em alta e em baixa e o programa procura por estas seqüências e negócios, então por que resumimos os castiçais em um padrão?
Esta não era a tarefa, e é impossível prover tudo de uma só vez, neste caso perdemos o conceito original que foi concebido como o principal: o usuário faz uma seqüência de velas em alta e em baixa, e o programa procura por estas seqüências e negócios, então por que resumir as velas em um só padrão?
Por que os resumimos? Bem, por exemplo, para simplificar o modelo. Na verdade, ela foi dada como exemplo.
Por que isso não é possível? Todas as combinações de castiçais japoneses que ocorrem com freqüência podem ser codificadas de uma forma ou de outra. Outra coisa é que a 1ª parte (eu escrevi sobre isso acima) não é suficiente, você deve usar pelo menos 2 partes, e elas também não são suficientes se você não resumir (simplificar) o modelo padrão.
Até agora, código Morse versão "1.003": você pode especificar manualmente uma descrição em cadeia do padrão e até mesmo executar passagens simples no testador.
O programa será usado por um usuário, não por um programador (foi dito acima e não uma vez) - e para ele "101" e "5" são dois números diferentes, e para ele "5" não contém nenhuma informação sobre a posição relativa das velas, mas "101" diz claramente "em alta, em baixa, em alta".
Entendi. Bem, então - uma seqüência de símbolos e um interpretador. Acho que é a opção mais flexível.
Não entendo bem - estes são programadores ou otários?
Por que precisamos traduzir algo em algo?
Se precisarmos de um código 101 - esse é o valor normal de 5. É isso. Qual é o problema? Traduzir mentalmente o decimal em binário?
Fiz experiências semelhantes, apenas minha vela tinha mais quatro tamanhos - de pequeno a grande. Isso faz oito tamanhos diferentes de velas. E, conseqüentemente, três bits. No padrão nós escrevemos o número (ulong) - a grade é maior do que no padrão de vinte barras.
O problema é, em minha opinião, rebuscado.
Primeiro, resolver o problema e depois criticar. Aqui está uma tarefa para você pensar:
Codifique o número int para as seguintes combinações de candelabros:
1011;
01011;
001011
Dica: estas são combinações diferentes.
George Merts: Entendi. Bem, então - cadeia de caracteres e interpretador. Parece-me ser a opção mais flexível.
Mais uma vez: otimizador_não_optimizador_parâmetros_de_estrutura. Como você buscará uma combinação de padrões lucrativos sem o otimizador?
Vasiliy Sokolov: Mais uma vez: o otimizador_não_optimizará_parâmetros_de_string. Como você buscará a combinação de padrões lucrativos sem o otimizador?
Se for necessário um otimista, acho que o usuário deve ser "esperto" o suficiente para traduzir o número em código binário (pelo menos com uma calculadora normal do Windows).
Vocês, amigos, têm um pedido contraditório. Se um usuário é tão falso que não pode usar uma calculadora para traduzir o código binário em código decimal - ele não pode lidar com a otimização de qualquer forma. No máximo, ele/ela pode executá-lo apenas uma vez para encontrar o melhor valor.
Se o usuário for suficientemente avançado para usar o otimizador, é razoável codificar os parâmetros de entrada com um comprimento regular sem assinatura,
Descobrir primeiro e depois criticar. Aqui está uma tarefa estimulante para você:
Codifique o número int com as seguintes combinações de velas:
1011;
01011;
001011
Dica: estas são combinações diferentes.
Além disso - eles são diferentes em comprimento. A primeira combinação - inclui quatro combinações de seis dígitos.
A segunda combinação inclui duas de seis bits.
De forma correspondente, devemos tomar apenas 64 combinações de seis bits durante a otimização.
Além disso, a última é um subconjunto das duas primeiras opções, e a penúltima é um subconjunto da primeira.
Portanto, no momento do registro da última combinação temos que identificar a segunda e a primeira combinação ao mesmo tempo. Na minha opinião, este é claramente um pedido incorreto.
Qual é o objetivo deste evento - encontrar a seqüência mais lucrativa? Não é necessário um robô ou um testador para isso - um indicador, no qual o comprimento da seqüência e as regras para fechar a posição (por TP ou pelo sinal oposto ou em qualquer outro lugar) são especificados, é suficiente. O indicador codificará todas as variantes dentro do comprimento especificado da seqüência e uma profundidade específica do histórico, ordenará o resultado (incluindo o sorteio) e o imprimirá onde você quiser. Mas o problema parece realmente rebuscado. Bem, se não é um brinquedo de adivinhação como 0101 para ocupar o usuário
Assim, ao otimizar - basta tomar 64 combinações de seis dígitos.
Pergunta: Qual é a probabilidade de aparecer no mercado uma combinação que corresponda aos 64 dígitos exigidos? Resposta: (1/2^64)*BarsCount. Isso significa que há quase 100% de probabilidade de que não será encontrada tal combinação. É óbvio que apenas um número int ou longo não pode descrever completamente o padrão, então precisamos de um parâmetro adicional especificando o comprimento do padrão.
Com passos tão pequenos você logo chegará ao que eu disse na segunda página.
Deixei de fora o parâmetro"comprimento do padrão " para especificar o comprimento para o padrão numérico (este parâmetro é usado apenas para o modo de otimização).
E uma rápida defesa - se você selecionar um tipo de padrão de string no modo de otimização, o Expert Advisor retornará "INIT_PARAMETERS_INCORRECT".
Você tem que pensar em tudo imediatamente, para que não tenha que refazê-lo mais tarde.
....
Mais uma vez, se voltarmos ao padrão "Estrela da Noite", ele pode ser visto como uma tomada de controle de um pequeno touro e uma tomada de controle de um grande touro. Isso significa que temos um padrão composto que consiste em uma vela em alta e uma absorção em baixa. E se somarmos os três castiçais a partir do padrão, obtemos novamente uma barra de pino.
Deixe-me inserir meu kopeck de 5 kopeck.
Esta tarefa não foi definida e é impossível prever tudo de uma só vez. Neste caso, o conceito inicial que foi planejado como básico será perdido: um usuário constrói a seqüência de castiçais em alta e em baixa e o programa procura por estas seqüências e negócios, então por que resumimos os castiçais em um padrão?
Permita que eu insira meus cinco centavos.
Esta não era a tarefa, e é impossível prover tudo de uma só vez, neste caso perdemos o conceito original que foi concebido como o principal: o usuário faz uma seqüência de velas em alta e em baixa, e o programa procura por estas seqüências e negócios, então por que resumir as velas em um só padrão?
Por que os resumimos? Bem, por exemplo, para simplificar o modelo. Na verdade, ela foi dada como exemplo.
Por que isso não é possível? Todas as combinações de castiçais japoneses que ocorrem com freqüência podem ser codificadas de uma forma ou de outra. Outra coisa é que a 1ª parte (eu escrevi sobre isso acima) não é suficiente, você deve usar pelo menos 2 partes, e elas também não são suficientes se você não resumir (simplificar) o modelo padrão.
Até agora, código Morse versão "1.003": você pode especificar manualmente uma descrição em cadeia do padrão e até mesmo executar passagens simples no testador.
O programa será usado por um usuário, não por um programador (foi dito acima e não uma vez) - e para ele "101" e "5" são dois números diferentes, e para ele "5" não contém nenhuma informação sobre a posição relativa das velas, mas "101" diz claramente "em alta, em baixa, em alta".
Não entendo bem - estes são programadores ou otários?
Por que precisamos traduzir algo em algo?
Se precisarmos de um código 101 - esse é o valor normal de 5. É isso. Qual é o problema? Traduzir mentalmente o decimal em binário?
Fiz experiências semelhantes, apenas minha vela tinha mais quatro tamanhos - de pequeno a grande. Isso faz oito tamanhos diferentes de velas. E, conseqüentemente, três bits. No padrão nós escrevemos o número (ulong) - a grade é maior do que no padrão de vinte barras.
O problema é, em minha opinião, rebuscado.
Primeiro, resolver o problema e depois criticar. Aqui está uma tarefa para você pensar:
Codifique o número int para as seguintes combinações de candelabros:
Dica: estas são combinações diferentes.
Entendi. Bem, então - cadeia de caracteres e interpretador. Parece-me ser a opção mais flexível.
Mais uma vez: o otimizador_não_optimizará_parâmetros_de_string. Como você buscará a combinação de padrões lucrativos sem o otimizador?
Se for necessário um otimista, acho que o usuário deve ser "esperto" o suficiente para traduzir o número em código binário (pelo menos com uma calculadora normal do Windows).
Vocês, amigos, têm um pedido contraditório. Se um usuário é tão falso que não pode usar uma calculadora para traduzir o código binário em código decimal - ele não pode lidar com a otimização de qualquer forma. No máximo, ele/ela pode executá-lo apenas uma vez para encontrar o melhor valor.
Se o usuário for suficientemente avançado para usar o otimizador, é razoável codificar os parâmetros de entrada com um comprimento regular sem assinatura,
Descobrir primeiro e depois criticar. Aqui está uma tarefa estimulante para você:
Codifique o número int com as seguintes combinações de velas:
Dica: estas são combinações diferentes.
Além disso - eles são diferentes em comprimento. A primeira combinação - inclui quatro combinações de seis dígitos.
A segunda combinação inclui duas de seis bits.
De forma correspondente, devemos tomar apenas 64 combinações de seis bits durante a otimização.
Além disso, a última é um subconjunto das duas primeiras opções, e a penúltima é um subconjunto da primeira.
Portanto, no momento do registro da última combinação temos que identificar a segunda e a primeira combinação ao mesmo tempo. Na minha opinião, este é claramente um pedido incorreto.
Assim, ao otimizar - basta tomar 64 combinações de seis dígitos.
Pergunta: Qual é a probabilidade de aparecer no mercado uma combinação que corresponda aos 64 dígitos exigidos? Resposta: (1/2^64)*BarsCount. Isso significa que há quase 100% de probabilidade de que não será encontrada tal combinação. É óbvio que apenas um número int ou longo não pode descrever completamente o padrão, então precisamos de um parâmetro adicional especificando o comprimento do padrão.
Com passos tão pequenos você logo chegará ao que eu disse na segunda página.