[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 793

 
artmedia70:
Não estamos abrindo a Buy at Ask price ???????


Foi o que eu escrevi: "Ospedidos de compra são abertos a preço de pedido".

Mas na tabela você vê o preço da Licitação.

 
PapaYozh:


Foi o que eu escrevi: "Os pedidos de compra são abertos a preço de pedido".

Mas na tabela você vê o preço da Licitação.

Tenho sempre os dois preços na tabela... Nos ajustes do terminal por F8 eu habilitei a exibição dos preços Ask`... Eu também corrigi um pouco o post anterior sobre a propagação - não pode ser assim.
 
artmedia70:
Não estamos abrindo uma Buy at Ask ??????? E não pode haver um spread de 60 pips (se você o tomar depois do intervalo), e se você o tomar antes ... então o spread no EUR de 325 pips é equivalente a ... :)

sua foto não mostra pontos.
 
PapaYozh:

sua foto não mostra os pontos.
Sim, eu me arrependo .... pode ser enganoso (como os colchetes em seu posto, onde me fizeram perder o significado de sua resposta sobre as perguntas e respondidas de forma errada... :) )
 
artmedia70:
Tenho sempre os dois preços na tabela... Nos ajustes dos terminais habilitei a exibição de Ask`ts por F8. E corrigiu um pouco o post anterior sobre a propagação - não pode ser.


Mas o preço Ask não é visível nos bares.

Sobre a propagação. É um spread de cinco dígitos? Se sim, spread alargado em notícias + slippage = são 6 pips completos (60 pips de cinco dígitos) para você

 
PapaYozh:


Mas o preço Ask não é visível nos bares.

Sobre a propagação. É um spread de cinco dígitos? Em caso afirmativo, então spread extendido em notícias + slippage = são 6 pips (60 pips de cinco dígitos) completos

O problema é esse: quatro... :(
 
PapaYozh:

Se eu entendi seu problema corretamente, você não deve ser guiado pelo horário de fechamento do pedido. É preciso começar no início do bar no qual o sinal para abrir e a posição foi aberta. O que eu faria, pessoalmente, é o seguinte:

1) criar uma variável do tipo data/hora onde eu entraria o valor Tempo[0] se o pedido for feito com sucesso;

2) na função init(), inicializar esta variável com valor "0". Prefiro uma inicialização explícita, já que é mais clara ao revisar o código;

3) quando aparecem as condições para abrir uma posição, antes de enviar o pedido de OrderSend(...), compare o valor desta variável com o valor Time[0] e se não forem iguais, envie um pedido.

4) se a posição fosse aberta, eu guardaria o valor de Tempo[0] na mesma variável.


Obrigado pelo esclarecimento - mas você acha que ao invés de comparar com o valor de Tempo[0], tente dar essa tarefa antes do pedido de OrderSend(...) : verifique se há um StopLoss-y fechado na barra atual? Então eu preciso inserir a função StopLoss() que funcionará com a variável StopLoss que eu anunciei? Ou NÃO é POSSÍVEL, por uma questão de princípio? É importante para mim que uma nova posição não seja aberta no bar que tenha pegado uma perda, mesmo que ela corresponda aos parâmetros da abertura.

extern double Stoploss           =1000;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
    
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>ma && Close[1]<ma)  
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,30,Bid+Stoploss*Point,Bid-Takeprofit*Point,"",MAGICMA,0,Red);
      return;
     }
//---- buy conditions
   if(Open[1]<ma && Close[1]>ma)  
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,30,Ask-Stoploss*Point,Ask+Takeprofit*Point,"",MAGICMA,0,Blue);
      return;
     }
//----
  }

A questão é que os fatores de tempo devem ser considerados por último - muitas vezes eles escorregam - ou melhor, a interpretação de uma ordem de alguma forma se revela diferente (ambíguo).

 
obla4ko, criar uma variável de data/hora x, e deixar que seja a hora de abertura do bar onde ocorreu a parada de perda. E em condição de aberto, definir que (Time[0]!=x). Neste caso x deve ser atualizado em uma nova parada acionada. Esta é a primeira variante. E a segunda, como estou escrevendo pela terceira vez, depois de um interruptor de parada acionado à espera de 1 barra, isto seria exatamente o mesmo, não é lógico?
 
PapaYozh:


Mas o preço Ask não é visível nos bares.

Sobre a propagação. É um spread de cinco dígitos? Se sim, então a propagação ampliada em notícias + deslizamento = isso é 6 pips (60 pips de cinco dígitos) cheios

Também, na minha opinião, pode haver um "grampo de cabelo", posteriormente limpo :)), mas "guardado na memória" de prazos menores, aos quais você não chegará...

E a questão dos testes sobre a história :

pode um Expert Advisor (um simples!) - ...) sobre o mesmo período da história, com os mesmos parâmetros dão resultados completamente diferentes?

A única coisa que fiz, entre estes dois testes, foi atualizar o arquivo de citações. e isso poderia ter levado a tal resultado!? - então acontece que a história toda é uma besteira!?

 

Alguém pode me dizer por que a MathRound() se comporta de forma estranha. Valores grandes contam, valores pequenos não...

Existe um código simples para aumentar os valores de algumas variáveis em 10%:

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/10*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/10*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

Os valores calculados são registrados. Se todas as linhas, exceto a primeira, estiverem divididas por 10, então esta conta como número 100 e não há nenhum problema com ela:

2010.08.11 19:16:20 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Função de cálculo: SLs = 11 e TPs = 66, TStartS = 60, TStop.Sell = 20, TStopLastPosS = 60, TStop.SellLP = 25

O que está marcado em verde é o que conta na primeira linha do código.

Mas se você colocar divisão por 100 (como deve ser)

if (IncreaseTP) 
   {
      LastTakeProfitS = MathRound(LastTakeProfitS+LastTakeProfitS/100*PercentTakePr);  // PercentTakePr = 10; (десять процентов) эту строку считает
      TStartS = MathRound(TStartS+TStartS/100*PercentTakePr);                          // а вот эту и все, которые ниже - нет
      TStop.Sell = MathRound(TStop.Sell+TStop.Sell/10 0*PercentTakePr);                 // ... причём, если деление на 100 заменить на деление на 10,
      TStartLastPosS = MathRound(TStartLastPosS+TStartLastPosS/100*PercentTakePr);     // ... то начинает считать и эти строки, но уже, естественно...
      if (TStop.SellLP<=Level_new+spread) TStop.SellLP=Level_new+spread;               // ... рассчёт становится неверным...
   }

... então todas as linhas, exceto a superior, não contam em absoluto - os valores iniciais permanecem, como se não tivessem sido adicionados

dez por cento:

2010.08.11 19:41:03 2009.01.02 10:34 Sergitas_v1.01 EURUSD,M5: Função de cálculo: SLs = 11 e TPs = 66, TStartS = 30, TStop.Sell = 10, TStopLastPosS = 30, TStop.SellLP = 15

Ajudem-me a entender o que e onde diabos está... :)