Divulgação do comércio no Meta Trader - página 144

 
Scorp1978 >>:

rid спасибо хорошая идея (от тиков придется тогда отказываться), фильтр от сильных убыточных движений ты имеешь ввиду "если сумарный профит меньше чего то, то закрыть все позиции".......

Não. Eu quis dizer a entrada inicial - "/if
// o tamanho da primeira vela é maior que o valor estabelecido, nenhuma negociação é permitida"...

 
Boa tarde a todos! Boas festas para todos aqueles que consideram o dia feriado!
//
Surgiu uma pergunta. Aqui está uma função, que produz (calcula) o spread médio entre os instrumentos para os últimos NBars.
 double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;
   double N = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}
Por favor me diga como configurar
//
int k;
double N = 0; double Sum = 0;
for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
{
if(N == NBars)
//
para que a função retorne o valor médio de spread não para todas as barras NBars,
mas para NBars exceto a última barra.
Em outras palavras, eu quero que a última barra seja excluída do cálculo! Ou mesmo um determinado número de barras mais recentes não deve ser incluído no cálculo.
Existe alguma maneira de "organizar" isto?
(Em troca, eu posso dar uma boa entrada no mercado na segunda-feira, 3 de maio. Com uma alta probabilidade de fechamento lucrativo subseqüente!)
 
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   double Sum = 0;
   if(NBars > iBars(Symbol_1,Timeframe)) NBars=iBars(Symbol_1,Timeframe); // если н больше чем баров на графике то обрезаем
   if(NBarsSkip >= NBars) NBarsSkip=0; // если пропускаем баров больше/равно чем NBars, то ничего не пропускаем
   for(k = NBarsSkip; k < NBars; k++)
   {

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}
NBarsSkip define o número de barras perdidas que não participarão do cálculo. c NBarsSkip by NBars participará do cálculo.
 
Obrigado, NCI !
Enviar-lhe-ei uma possível entrada dentro de momentos.
Uma pergunta a mais.
Acabei de ter uma idéia.
Que tal torná-lo ainda mais simples? Definir assim:
ao invés de for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
set
for(k = M; k < iBars(Symbol_1,Timeframe); k++),
onde M é o número de barras excluídas do cálculo.
Vai funcionar?


 
Apenas não k=M, mas k=M+1... O Bar M não é levado em conta
 
Obrigado! Eu também enviei uma entrada.
 
honestamente, não notei no início que a NBars deveria considerar apenas barras existentes em dois instrumentos ao mesmo tempo, então o código que coloquei não atende a esta lógica. ea construção com M também não seria correta. neste caso, você poderia fazer o seguinte:
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   int NReal = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         N++;
         if(N>NBarsSkip)
         {
            Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
            NReal++;  // счетчик Н которые не пропущены и посчитаны
         }
      }
   }
   if(NReal==0) return(0); // так как у нас не получилось рассчитать ни одного бара
   else
   {
      double avarageSpread = Sum / NReal;
      return(avarageSpread);
   }
}


 
Obrigado. Por alguma razão meu código não foi compilado no início, ele retornou um erro (colchete)
Até que mudei do nome da função " , int NBarsSkip".
para os parâmetros externos da EA
NBarsSkip int exterior =2
Não sei por que houve um erro.
Mas quando a mudei de lugar, tudo estava bem.
 

Li este ramo de capa a capa - todas as 145 páginas. graças a todos: rid, leonid553, fduch, neoclassic, getch, forex-k, goldtrader, timbo, fortrader. Tenho muitas informações, ainda estou digerindo-as. Minha principal conclusão é a seguinte: você tem que cavar aqui, vale a pena. P.s.: fio com bons recursos, quase nenhuma inundação. Mais uma vez obrigado 2rid

 

Obrigado!

"Informação a ser pensada.

A partir de segunda-feira a propagação ZM-ZL (óleo de farinha, 5:6)

!