[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 302

 
OK pessoal, muito obrigado, muito útil, desculpem a "coragem" ))
 
Parn25:

Ajudem-me aqui, pessoal!!!

Estou tentando escrever um Expert Advisor baseado na estratégia do canal da manhã. A essência é a seguinte: às 6:01 no par EURGBP determinar o canal de movimentação de preços das 0h às 6h. Definimos duas ordens pendentes e se a ordem pendente acionada for fechada por uma rolha, abrimos uma ordem na direção oposta. É a segunda parte da estratégia que não funciona. Ou seja, se uma parada foi acionada, não podemos abrir uma ordem na direção oposta.

Você precisa parar imediatamente! Ele acionará automaticamente.

Encontrei isto no caixote do lixo, talvez venha a ser útil.

void OrderCloseAll(){
   for (int i=0;i<OrdersTotal();i++)
     if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderType()==OP_BUY)
       OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);
      else
      if(OrderType() == OP_SELL)
       OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);
}

void OrderDeleteAll(int lots){
     for (int i=0;i<OrdersTotal();i++)
         if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if (OrderType()>1&&OrderType()<6)
         if(OrderLots()==lots){
          OrderDelete(OrderTicket());
          i=0;
         }
}
 //----------------------------------------------------
// покупка
void OpenBuyLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
    OrderSend(Symbol(), OP_BUYLIMIT, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellLIMIT(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) + Loss*Point;
   double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLLIMIT, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
 //----------------------------------------------------
// покупка
void OpenBuySTOP(double lot, double price){
   double   SL = NormalizeDouble(price,Digits) - Loss*Point;
   double TP = NormalizeDouble(price,Digits) + Target*Point-MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_BUYSTOP, lot,  NormalizeDouble(price,Digits), Slippage, SL, TP, NULL, STUPID, 0, Blue);
}
 //----------------------------------------------------
// продажа
void OpenSellSTOP(double lot, double price){
  double   SL = NormalizeDouble(price,Digits) + Loss*Point;
  double TP = NormalizeDouble(price,Digits) - Target*Point+MarketInfo(Symbol(),MODE_SPREAD)*Point;
   OrderSend(Symbol(), OP_SELLSTOP, lot,  NormalizeDouble(price,Digits), Slippage,  SL, TP, NULL, STUPID, 0, Red);
}
Arquivos anexados:
 
Parn25:

Pessoal, ajudem-me um pouco!!!

Estou tentando escrever um EA usando a estratégia do canal da manhã. A essência é a seguinte: às 6:01 no par EURGBP determinamos o canal de movimentação de preços das 0 horas até as 6 horas da manhã. Definimos duas ordens pendentes e se a ordem pendente acionada for fechada por uma rolha, abrimos uma ordem na direção oposta. É a segunda parte da estratégia que não funciona. Ou seja, se uma parada foi acionada, não podemos abrir uma ordem na direção oposta.
O exemplo com uma ordem pendente é aproximadamente o seguinte.
Arquivos anexados:
 
costy_:
O exemplo com o pêndulo é algo parecido com isto.
OK, obrigado, eu vou tentar!!!
 

Olá.

Hoje é o fim de semana, portanto só tenho o testador visual trabalhando :) Começo no Testador de Estratégia o roteiro para descarregar valores indicadores para um arquivo, mas ele descarrega a partir da data real atual (28 de outubro 23:55).

Como transfiro o valor (tempo) da última barra do testador visual para o roteiro?

int start =iBarShift(NULL,0,Time[2200+EndB-1]);
int end   =iBarShift(NULL,0,Time[EndB]);

Como passar e calcular no script EndB - valor da última barra no testador?

P.S. Como último recurso, vou colocar todo o código do roteiro no Expert Advisor, etc.

 

Boa tarde!

Estou estudando o livro didático, se me permitem fazer uma pergunta sobre o material de estudo. Se houver um tópico separado para estas perguntas, eu ficaria grato por um link.

Estou estudando o indicador ROC (o código está no arquivo anexo).

Se eu entendi corretamente, a lógica do indicador é a seguinte:

no gráfico atual é tirada a referência MA, dela é traçada a linha de mudança na velocidade V,

além disso, o MA do próximo (TF maior) é calculado, mas não é exibido; a linha V seguinte é calculada a partir dele.

O mesmo para o próximo período de tempo.

Pergunta: Eu não entendo o registro dado

Exterior int Bars_V =13; // Número de barras para o cálculo da velocidade
As explicações do código indicador dizem que a velocidade é calculada como uma diferença de 2 barras.

E mais .....

Carreguei este código indicador no MT4, no H4 ele não termina na barra atual, mas há cerca de 9-10 dias, de acordo com a história.

Em outros períodos de tempo, tudo bem. Por que é assim?

Obrigado antecipadamente por sua ajuda, Cumprimentando Olga

Arquivos anexados:
my_roc.mq4  8 kb
 

Bom dia!

Todas as posições abertas devem ser fechadas após o intervalo de tempo especificado, ou seja, a vida útil da posição aberta deve corresponder ao intervalo selecionado.

Pergunta. Existem outras soluções, exceto OrderOpenTime()?

 
Zar:

Olá.

Hoje é o fim de semana, isso significa que somente o testador visual funciona :) Inicio o script no testador para descarregar valores indicadores para um arquivo e ele descarrega a partir da data real atual (28 de outubro 23:55).

Como transfiro o valor (tempo) da última barra do testador visual para o roteiro?

Como passar e calcular no script EndB - valor da última barra no testador?

P.S. Como último recurso, vou colocar todo o código do roteiro no Expert Advisor, etc.

O roteiro não encontrará o tempo do testador tão facilmente (o indicador, porém), você pode anexá-lo ao início do teste.EA

int start()
{
GlobalVariableSet( "Time_test", Time[0]) ;
.....................

e no roteiro

datetime time_start=GlobalVariableGet( "Time_test");

de forma rápida e confiável ...

 
Operr:

Bom dia!

Todas as posições abertas devem ser fechadas após o intervalo de tempo especificado, ou seja, a vida útil da posição aberta deve corresponder ao intervalo selecionado.

Pergunta. Existem outras soluções, exceto OrderOpenTime()?

Há muitas opções, por exemplo, podemos escrever o tempo aberto no arquivo, mas seria mais fácil percorrer as ordens abertas e comparar o tempo restante.

Em geral, reformular ... "Todas as posições abertas devem ser fechadas após o intervalo de tempo especificado" para cada posição individual (foi assim que entendi a pergunta).

 
LOA:

Boa tarde!

Estou estudando o livro didático, se me permitem fazer uma pergunta sobre o material de estudo. Se houver um tópico separado para estas perguntas, eu ficaria grato por um link.

Estou tentando descobrir o indicador ROC (o código está no arquivo anexo).

Se eu entendi corretamente, a lógica do indicador é a seguinte:

no gráfico atual é tirada a referência MA, dela é traçada a linha de mudança na velocidade V,

além disso, o MA do próximo (TF maior) é calculado, mas não é exibido; a linha V seguinte é calculada a partir dele.

O mesmo para o próximo período de tempo.

Pergunta: Eu não entendo este registro

Barras internas externas_V =13; // Número de barras para cálculo de velocidade
As explicações do código indicador indicam que a velocidade é calculada como uma diferença entre os valores de 2 barras.

E mais.....

Carreguei este código indicador no MT4, no H4 não está na barra atual, mas cerca de 9-10 dias atrás, de acordo com a história.

Em outros períodos de tempo tudo está bem. Por que é assim?

Estou muito grato por sua ajuda com antecedência.

"TF maior" - não, o mesmo MA mas os dados são tomados com um offset Sh_1 re Sh_1=Bars_V; // O período de velocidade medida (barras)

"Similar para o próximo período de tempo" - não, há uma chave no início (para cada período de tempo os coeficientes são diferentes K2, K3)

    switch(Period())                 // Расчёт коэффициентов для..
     {                             // .. различных ТФ
      case     1: K2=5;K3=15; break;// Таймфрейм М1
      case     5: K2=3;K3= 6; break;// Таймфрейм М5
      case    15: K2=2;K3= 4; break;// Таймфрейм М15
      case    30: K2=2;K3= 8; break;// Таймфрейм М30
....
Period_MA_2 =K2*Period_MA_1;   // Расчётн.период МА для ближ. ТФ
Period_MA_3 =K3*Period_MA_1;   // Расчётн.период МА для след. ТФ

A definição "Período MA calculado para o próximo TF" não é verdadeira, os erros estão sempre presentes nos livros didáticos (especialmente as "histórias" são muito parecidas)

"Pergunta: Eu não entendo o seguinte verbete

Bars_V =13; // Número de barras para cálculo de velocidade" pesquisar mais adiante pelo código Bars_V ...

   Sh_1=Bars_V;                   // Период измерен скорости (баров)

então o que é Sh_1, este valor é a linha de velocidade MA 1 offset, etc.

// Предназначен для использования в качестве примера в учебнике MQL4.
não é um bom exemplo, leia algo mais simples a partir dos indicadores padrão