Quem quer uma estratégia? Muito e de graça) - página 59

 
Stellarator >> :

alguma vez houve discrepâncias nos valores originais e "posteriormente implantados"? ainda o dobro...)

ainda não.... todos os problemas vêm do desleixo :)

Forçado a dissuadir! A nuança chave - "o limite de uma iteração da EA". Bem, dentro destes limites o indicador é calculado UMA VEZ (na primeira chamada)! Declaro isto com 100% de confiança. Todas as chamadas subseqüentes não começam() de forma alguma, mas apenas tomam os valores necessários dos amortecedores necessários. A condição é 100% se os parâmetros de entrada permanecerem inalterados (exceto para o buffer e o offset). A regra é válida para cálculos dentro dos limites de uma ferramenta. Mas eu acho que o princípio se aplica mesmo quando o iCustom se refere a outras TFs e ferramentas.

Seria preciso ser "forçado" a ..... tudo de uma só vez. Obrigado por outro recurso indocumentado :)


 

FSB__Bar_Abertura_Bar_Fechamento.mql4 v0 .0.2 Beta


Entrada no mercado na abertura de bares;

Saída no Fechamento do Bar (10 seg. até o fechamento ou na próxima abertura)


** Esta é apenas uma demonstração para testar os pontos de entrada/saída. **


Fragmentos de código:


bool bIsFirstTick;// It is used to catch the Bar Opening.
datetime dtCurrentBarOpeningTime;

int init()
{
   bIsFirstTick = false;
   dtCurrentBarOpeningTime = Time[0];
   return(0);
}

int start()
{
   // Is this the first tick for the bar
   bIsFirstTick = ( dtCurrentBarOpeningTime != Time[0]);
   if( bIsFirstTick)
   {
      dtCurrentBarOpeningTime = Time[0];
   }

...
...



///
/// Exit at a Bar Closing price (almost).
///
/// MetaTrader does not provide an onBarClose event so we are not able to close a position
/// exactly at Bar Closing. We workaround the problem by closing the position within a time span
/// near to the bar closing time. In the cases when there is no any ticks within this period,
/// we close the position att he next bar opening price.
///
int ClosePositionsAtBarClosing(bool bCloseLong, bool bCloseShort, datetime dtClosingTimeSpan)
{
   int  iOrders = OrdersTotal();
   bool bIsOpen = false;

   for(int iOrder = 0; iOrder < iOrders; iOrder++)
   {
      OrderSelect( iOrder, SELECT_BY_POS, MODE_TRADES);
      
      if((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol())
      {  // There is an open position for this symbol.

         datetime dtOpeningTime     = Time[0] - TimeSeconds(Time[0]); // The opening time of current bar
         datetime dtClosingTime     = dtOpeningTime + Period() * 60;  // The closing time of current bars
         datetime dtCurrentTickTime = TimeCurrent() ;                 // The time of current tick
         
         if( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan ||  bIsFirstTick)
         {  // The current tick is within the closing time span or this is the first tick of the bar.

            // Code

         }
       }
    }
}
Arquivos anexados:
 

1. em relação ao desempenho:

Na maioria das vezes, não precisamos recalcular um indicador para cada carrapato. (Referência - "Usar valor de barra anterior".) Um indicador deve ser calculado ou em "Abertura de Barra" ou em "Fechamento de Barra".


2. fMicron:

Eu uso fMicron = Ponto/2 quando comparo preços para decisões comerciais. Mas isto não é aplicável para os indicadores. Por exemplo. para USDJPY ponto = 0,01; fMicron = 0,005.

0,000075 é o resultado de muitos testes ao longo dos anos. Comecei a trabalhar na FSB em 2001 :) É claro que isso não significa nada. Mudei de idéia muitas vezes sobre isso.

**edit: MT dá isto para as mãos dos usuários. Provavelmente, os gurus EA podem dizer o que usam em seus EAs.

**edit2: Vou colocar este parâmetro no arquivo de configuração para experimentos.


3. vou começar a fornecer o código fonte original para download para cada versão da FSB. Não precisarei atualizar o site para cada pequena mudança em um caso desses.


Comecei a trocar o carro alegórico para o dobro. Publicarei esta versão em breve esta noite ou amanhã. Depois disso, temos que testá-lo completamente. Temos que passar por cada indicador para corrigir alguns problemas / características antes de escrevê-los em MQL.

 

1. Sim, na maioria dos casos (dada a abordagem geral da FSB para posições de abertura/fecho (na abertura/fecho do Bar)) - Isto não é necessário. Mas, digamos - as regras de boas maneiras - são obrigatórias. Cálculo do indicador "de zero" todas as vezes (mesmo uma vez no Bar) - em geral (concordo) não crítico dentro dos limites de grandes períodos... Mas e se o período for de minutos? E se o indicador ainda precisar (ou quiser) ser calculado a cada barra? (Algum ponto sofisticado da posição, que não pode (ou não pode, devido ao preço de abertura ser inferior ao nível de paradas) ser pego por uma ordem?)

A conversão não é complicada por muito, na verdade - sim, há algum código "no invólucro" e o princípio de andar de bar é invertido. Na verdade, isso é tudo, de modo geral. O principal é manter o algoritmo (para que ele possa ser facilmente lido e identificado dentro do código fonte) e manter a compatibilidade paramétrica com a FSB. Criar um mecanismo conveniente para a extração de sinais. E para torná-lo utilizável para designers visuais puros (que não se importam com a EA). Na minha opinião.


2. Bem, eu não sugeri usar a variante Point/2 para comparar (igualmente) os valores indicadores :). - Eu estava apenas sugerindo uma constante. A questão está em seu valor e dimensão (0,000075 - nada mal, eu não disse isso - eu não entendo por que exatamente 75 e não "normalmente" 50:)? A experiência "desde 2001" é bastante reveladora (argumento!) e estou bastante disposto a aceitar este valor. Mas como última observação - para citações com uma dimensão de 0,12345 isto não será suficiente (quero dizer - muito :))) O número deve ser deslocado por pelo menos um quadro para a direita (0,0000075). Em minha corretora, por exemplo, tais cotações já são prática comum... Eu sugeriria ajustá-lo para o instrumento e usar "10", e não "75" :):

fMicron = Ponto * 0.1f

Em resumo, sim - proponho que seja parametricamente definido (penso que depois de alguma experimentação amigável tudo se encaixará (embora... se o ponto mudou muitas vezes ;)...). E esperar pela opinião de mais pessoas...


3. Consegui baixar as fontes postadas :-P. Portanto, haverá "algo a ser comparado" (em termos de código resultante). E por mais que eu não queira mais incomodá-lo - boa sorte com a flutuação para a dupla conversão!


(como é o teste com RSI? ;), se você conseguir fazer isso?)

 

Descobri que o melhor é 100 > Micron > 50. É por isso que eu tomei 75. Era para meu corretor: Ponto = 0,0001.

Mas você está certo que os corretores começaram a citar em 0,00001.

Vamos fazer: Micron = Math.Min(Ponto * 0,75, 0,000075)

Espero terminar a conversão em 3 horas a partir de agora. Vou colocar aqui o programa para testes.

Também vou carregar os códigos fonte dos indicadores convertidos.

 

Todos os indicadores e parâmetros são números duplos .

Micron = 0,000075


Coloque o exe na pasta junto com a última FSB v2.8.3.3 Beta. Ambos os programas compartilharão os mesmos dados e estratégias. É conveniente para comparar. Tenha cuidado com os valores dos indicadores. Praticamente todos os indicadores e a metade dos outros arquivos foram alterados.

Para ver a prensa de precisão total F12 no gráfico ou usar o Command Console (ind ####).


Favor informar qualquer problema. Agora é o momento de solicitar mudanças sobre os indicadores. Temos que consertá-los antes para continuar o trabalho de integração da MT.



 

Bom dia!

Miroslav, muito pouco tempo agora... por isso é rápido:

1. Obrigado pela rápida tradução (flutuar para dobrar)! Ótimo!

2. Até agora tudo parece funcionar (até onde consegui verificar), você pode ver as diferenças (on the fly), tanto em valores indicadores como em resultados estratégicos :)

3. MAS - as diferenças não eram o que esperávamos anteriormente! (ontem à noite fiz uma experiência interna e meus "medos" foram confirmados - a conversão aumentará a precisão do cálculo - mas não mudará catastroficamente o resultado! Algo da área de diferenças no quarto quinto dígito... mas temos divergências tão cedo quanto o segundo dígito! (o mesmo RSI, por exemplo))


O MOTIVO É OUTRA COISA!!!


O que eu consegui verificar:

1. No início pensei se havia algum elo duro no tema dos Dígitos (tenho instrumentos com 5 dígitos, lembre-se)... Forçado especificando 4 dígitos nas propriedades da ferramenta - não ajudou (a propósito - mas funciona!)

2. O código dos próprios indicadores ... hmm... ... bem, não há nada do que reclamar! Agora é o dobro em todos os lugares, o código em si (como eu vejo) não mudou. O código é bastante simples (muitas vezes operando apenas com adição e subtração) - tal erro pode NÃO ter sido acumulado lá!!! (não tenho tanta certeza sobre isso ... mas ... ;))

3. Meu último pensamento (que não poderei verificar) - E ISTO É O QUE :)!:



Valores de fechamento/abertura de barras (???) (e outros, potencialmente?)


De onde vêm estes números???? :))) (que tipo de "aditivos" são eles :D?)

Eu o levo de algum lugar aqui (Bar Closing.cs):

            // Saving the components
            component = new IndicatorComp[1];

            component[0] = new IndicatorComp();
            component[0]. CompName  = "Closing price of the bar";
            component[0]. DataType  = ( parameters. SlotType == SlotTypes.Open) ? IndComponentType. OpenPrice : IndComponentType. ClosePrice;
            component[0]. ChartType = IndChartType. NoChart;
            component[0]. FirstBar  = 2;
            component[0].Value     = Data.Close;

Como resultado, minha primeira suposição de trabalho é que (talvez) se trata disso? ("errado" (ou "certo", mas por que exatamente assim?) dando valores de citação na função?)

Parcialmente, aparentemente, à questão dos valores obtidos (para preencher os amortecedores operados durante o cálculo do indicador) a partir da função procurada flutuaçãoestáticaprotegida [] Price(BasePrice price )


Em geral, Miroslav - "a bola está em sua quadra" :). Por enquanto, notei o novo código dos SEUS indicadores, que é perfeitamente compatível com os indicadores MT (sou persistente :D, vou terminar o assunto RSI):



Mesma barra, primeiro indicador - conversão, segundo - nativo de MT.


Alguma reflexão, sugestão? (Estarei lá em 6 horas)

 

Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected static float[] Price(BasePrice price)

Todas as classes básicas, métodos e propriedades retornam agora valores duplos, assim como todas as funções comerciais (mudei nos últimos 6 meses).

Parece que há uma diferença na fórmula da LER. Não pode estar no segundo sinal "mas nós já temos uma diferença no segundo sinal! :) Vou tentar adotar a fórmula MT RSI existente na FSB.



**Editar:

Já está fixado:

Parâmetros padrão: RSI(fechado, 14, suavizado) == MT RSI

            for (int iBar = 1; iBar < Bars; iBar++)
            {
                if ( adBasePrice[ iBar] > adBasePrice[ iBar - 1]) adPos[ iBar] = adBasePrice[ iBar] - adBasePrice[ iBar - 1];
                if ( adBasePrice[ iBar] < adBasePrice[ iBar - 1]) adNeg[ iBar] = adBasePrice[ iBar - 1] - adBasePrice[ iBar];
            }

            double[] adPosMA = MovingAverage( iPeriod, 0, maMethod, adPos);
            double[] adNegMA = MovingAverage( iPeriod, 0, maMethod, adNeg);

            for (int iBar = iFirstBar; iBar < Bars; iBar++)
            {
                if ( adNegMA[ iBar] == 0)
                    adRSI[ iBar] = 100;
                else
                    adRSI[ iBar] = 100 - (100 / (1 + adPosMA[ iBar] / adNegMA[ iBar]));
            }


Programa para download em breve.


 

Miroslav - não há diferenças nas fórmulas. Como eu disse no início da discussão do RSI - você tem apenas um OUTRO laço de média (que forçadamente faz suavizar qualquer resultado de funções MovingAverage de funcionamento correto) :), EXCETO o primeiro valor (que permanece da execução MovingAverage :).

De qualquer forma, a julgar pelo último código citado - tudo caiu no lugar (e agora o RSI vai ler outros modos de média normalmente) :)! Yahoo!


(código indicador, que salvei antes, já contém esta mudança ;) - basta chamar o fsbRSI com os seguintes parâmetros para ter certeza disso:

indLogic = não importante

maMétodo = 2 (! importante MODE_SMMA em termos de MT)

preço base = 0 (PREÇO_CLOSE em termos de MT)

Período iP = 14

fLevel = não importante

iPrvs = não importante

E obtenha uma correspondência exata dos resultados com o Índice de Força Relativa nativa (que vem com MT)

Exceto que tanto fsbRSI quanto iRSI NÃO são o mesmo que FSB :(


Voltemos, portanto, ao problema principal:


"Todas as classes básicas, métodos e propriedades retornam agora valores duplos, assim como todas as funções comerciais (mudei nos últimos 6 meses)".


Bem, isso é ótimo! Só não entendo como esta tese deve afetar

Preço de abertura do bar e preço de fechamento do bar? No exemplo acima.


Para repetir a pergunta: Por que os preços procurados são DIFERENTES das cotações?? (quero dizer 6,7,8, ... dígitos)


odobro não tem absolutamente nada a ver com isso! Os valores entre aspas são normalizados e devem ser preservados (ser completamente idênticos) quando simplesmente copiados entre as variáveis.

Se valores similares começam a aparecer no cálculo dos indicadores (quando os amortecedores para cálculo são preenchidos com base nos valores das cotações, a margem de flutuaçãoestáticaprotegida [] Price(BasePrice price )), então estamos MELHORES (estranho como pode parecer), ou seja, é como outra fonte (além da margem de flutuação anterior) de dados "ligeiramente" desnormalizados :)

 

Mudei ligeiramente alguns dos indicadores para se parecerem com os indicadores padrão da MT.


Mudou os indicadores FSB:

RSI

Oscilador do RSI

Oscilador RSI MA

Bandas de Bollinger

Desvio padrão

Estocásticos


Existem diferenças nos seguintes indicadores:

Momentum

Índice de Facilitação de Mercado


Outros:

MT Oscilador de Média Móvel == FSB MACD Histograma

MT Momentum == FSB Taxa de mudança

Índice de Vigor Relativo - não incluído na FSB


Agora os indicadores FSB e MT devem ser mais ou menos iguais.


TODO:

Estocásticos - revisão dos sinais;

Índice de Facilitação de Mercado - revisão da fórmula;

Um momento como o do MT a ser incluído no FSB - denominado "Momentum MT".

Incluindo o "Índice de Vigor Relativo" no FSB.