[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 340

 
dyxaa:

pessoas, como fechar uma ordem pendente em n, número de pips se ela não tiver acionado?

Não pode ser fechado, mas pode ser apagado.

 

Eu desenho um indicador para fins de treinamento (isto é, estou aprendendo) e obtenho este resultado quando altero os dados:


As linhas vermelha e azul não fluem suavemente uma na outra.

Por que isso acontece e como posso contornar isso?

  for(i = limit; i >= 0; i--) 
    {
     cciTrendNow      = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i);
     cciTrendPrevious = iCCI(NULL, 0, CCIPeriod, PRICE_TYPICAL, i+1);

     if (cciTrendNow > st && cciTrendPrevious < st)
      {
       TrendUp[i+1] = TrendDown[i+1];
       ArrayInitialize( TrendDown[i+1], 0 ); // Попытался обнулить, чтобы обойти некрасивую отрисовку.
      }

     if (cciTrendNow < st && cciTrendPrevious > st) 
      {
       TrendDown[i+1] = TrendUp[i+1];
       ArrayInitialize( TrendUp[i+1], 0 );   // Попытался обнулить, чтобы обойти некрасивую отрисовку.
      }
    }

O problema aparece nesta parte do código. Mas como superá-la - não consegui descobrir ou pensar em algo por mim mesmo. Por favor, informe.

 
dyxaa:

pessoas, como fechar uma ordem pendente em n, número de pips se ela não tiver acionado?

Clique sobre a cruz!
 
artmedia70:

Eu não estava falando de variáveis externas. Eu estava falando sobre isso.

Vamos imaginar uma situação. Uma decisão deve ser tomada de acordo com a última posição em aberto.


Para o testador:

Criamos variáveis, nas quais armazenaremos os dados necessários da última posição aberta.

Assim que uma nova posição for aberta, adicionaremos imediatamente os dados necessários a estas variáveis.

Quando chega um sinal para abrir uma próxima posição (por exemplo, após 20 minutos de teste), precisamos verificar alguns critérios, pelos quais decidimos sobre os dados da posição a ser aberta. Estes critérios, por convenção, dependem da posição anterior aberta. Nós as lemos a partir de variáveis (as salvamos na abertura anterior) e as usamos como dados adicionais para uma nova posição.

Quando abrimos uma posição, armazenamos os novos dados sobre a nova posição aberta nas variáveis.


De verdade:

Vamos imaginar a mesma situação, mas ... Imagine que depois que a última posição foi aberta e seus dados armazenados em variáveis, 10 minutos tenham passado (outros 10 minutos têm que passar antes que a próxima posição seja aberta (acabamos de assumir isso em um "testador")). E neste intervalo de tempo, o consultor especializado foi reiniciado por alguma razão.

O que acontece após o reinício da EA com os dados da última posição aberta, que foram armazenados em variáveis? Eles não existirão.

Então, onde precisamos obtê-los? Certo - busca. É por isso que precisamos da função de buscar os dados necessários. Portanto, é melhor encontrar tudo de uma vez, quando precisarmos, e não armazená-lo em variáveis, o que é realmente muito mais fácil e rápido.


Desculpe pelo esclarecimento tardio - acabamos de sair para o mundo ... :))



Obrigado Artyom. Tudo isso faz sentido, é claro. É por isso que estou aprendendo a escrever com funções. Mas às vezes a lógica não é tão boa assim. É por isso que eu tropeço. A última vez que resolvi este problema expandindo todos os dados de loop de uma função para outra, fiz uma pausa na programação em geral por alguns dias, para obter meus rolamentos. Agora vou seguir em frente!
 
solnce600:

Cavalheiros, favor aconselhar como codificar o seguinte algoritmo usando um laço.

se (iLow (Símbolo (),0,1) > iLow (Símbolo (),0,10))// se o MÍNIMO da primeira vela > MÍNIMO da décima vela

OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point, "jfh",123 ); // abra o pedido.

TENHO DE

Se Baixa 1 e simultaneamente Baixa 2 e simultaneamente Baixa 3...... . ...e ao mesmo tempo Vela 9 baixa> Vela 10 baixa (ou seja, vela baixa de 1 a 9)

/ /abrir uma ordem.

Obrigado.

Mesmo assim, se eu ouvisse sua pergunta corretamente, o código seria

bool have = true;

for (int i=0; i<10; i++)
  {
   if (Low[i] > Low[10])        // Как вариант:  if ( iLow(Symbol(),0,i) > iLow(Symbol(),0,10) )
    {
     have = false;
     break;
    }
  }

if(have) OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point,"jfh",123 );    //открыть ордер.

Mas isso é com a dica da FAQ. Não poderia ter sido feito sem ele.

 

Tenho uma idéia, mas como fazê-lo na vida real e como funcionará de forma confiável na vida real, eu realmente não sei.

A essência é a seguinte. Devemos entrar no mercado após colocar a coruja no gráfico imediatamente após o fechamento do bar, ou seja, na abertura de um novo bar. Esta é a primeira encomenda. Além disso, quando o pedido é fechado por um TP ou por um preço Stop, devemos abrir um pedido na abertura de um novo bar imediatamente. Como fazer isso de forma mais razoável?

Entendo que devemos criar uma variável. Coloque o preço aberto do bar atual nele. E comparar este valor com o preço de abertura da barra atual. Se o valor da variável não for igual ao preço de abertura da barra atual com o índice zero, abriremos um pedido.

Esta é a melhor opção?

 
Chiripaha:

Eu desenho um indicador para fins de treinamento (isto é, estou aprendendo) e obtenho este resultado quando altero os dados:


As linhas vermelha e azul não se encaixam perfeitamente uma na outra.

Por que isso acontece e como posso contornar isso?

O problema aparece nesta parte do código. Mas como superá-la - não consegui descobrir ou pensar em algo por mim mesmo. Pode me dizer, por favor?


Phew!... Já descobri... : )))

Agora, se eu pudesse apenas resolver o resto do problema, seria muito melhor. Obrigado a todos que quiseram ajudar! : ))

Abro mais exatamente dois tampões iguais - eles não desenham... Qual é a feitiçaria... - OK, vamos estudar e pesquisar. É uma pena perder tempo com a "bicicleta", porém. Quando, neste caso, quando inventar um novo?

 
hoz:

Tenho uma idéia, mas como fazê-lo na vida real e como funcionará de forma confiável na vida real, eu realmente não sei.

A essência é a seguinte. Devemos entrar no mercado após colocar a coruja no gráfico imediatamente após o fechamento do bar, ou seja, na abertura de um novo bar. Esta é a primeira encomenda. Além disso, quando o pedido é fechado por um TP ou por um preço Stop, devemos abrir um pedido na abertura de um novo bar imediatamente. Como fazer isso de forma mais razoável?

Entendo que devemos criar uma variável. Coloque o preço aberto do bar atual nele. E comparar este valor com o preço de abertura da barra atual. Se o valor da variável não for igual ao preço de abertura da barra atual com o índice zero, abriremos um pedido.

Esta é a melhor opção?


Se implementado, ele funcionará de forma tão confiável no comércio real quanto na demonstração. Mas não o fato de que será lucrativo.

Você tem que abrir um pedido e pronto . Mas você ainda não formulou em que direção a ordem deve ser aberta e sob quais condições este lado é determinado.

Você não precisa comparar nada - basta abrir um pedido quando uma nova barra aparece (com base em sua entrada).

newBars = iBarShift(Symbol(), PERIOD_H1, lastH1BarTime);    // Это было найдено через поиск на форуме

Se você não tem a menor idéia:

"E a experiência é filha de erros difíceis.
E o gênio é um amigo dos paradoxos" (Alexander Sergeyevich por sua ajuda).

Você precisa fazer (escrever) uma coruja e verificá-la experimentalmente. - Acho que ninguém vai escrever a coruja para você (de graça). Dar-lhe uma dica é uma coisa. Mas implementar idéias (pensamentos) não é ajuda, mas trabalho.

 
borilunad:
Clique sobre a cruz!

Exatamente. Brilhantemente simples))))

Estou pedindo sua ajuda) aqui está colocando um pedido pendente vamosparar de comprar por exemplo, eu preciso dele para apagar se o preço passou de 100 pontos para baixo ele pode fazer isso?

 
borilunad:
Clique sobre a cruz!

Exatamente. Brilhantemente simples))))

Estou pedindo sua ajuda) aqui está colocando um pedido pendente vamosparar de comprar por exemplo, eu preciso dele para apagar se o preço passou de 100 pontos para baixo ele pode fazer isso?

Razão: