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

 
solnce600:

Bom dia a todos!

Você poderia me dizer qual é a melhor maneira de codificar a seguinte condição

Se todos os castiçais de 1 a 20 são de baixa sem exceção (o número de pontos entre a abertura e o fechamento de cada candelabro não importa)

Para abrir um pedido.

A única maneira de fazer isso é escrever uma ordem de "fazer trabalho".


Se eu pudesse simplesmente escrevê-lo "à mão".

if(f) OrderSend(...); // открыть ордер Sell


bool f()
{
   for(int i = 1; i <= 20; i++)
    {
     if(Open[i] < Close[i]) return(false);
    }
    return(true);
}
 
AlexeyVik:

Bem, a menos que esteja escrito no local.


Muito obrigado.
 
fmv_for_a_way:

Cidadãos, vocês podem me dizer por que o terminal Alpari não consegue fazer um pedido?

A função OrderSend tem este aspecto

Não há parâmetros iguais a zero. Eu o verifiquei.

A distância mínima de parada e de lucro de acordo com as condições do terminal = 0,1.

O terminal gera erro 130 e escreve sobre um lucro ou parada inválida.

Os parâmetros SL e TP são 11 e 1 (após a normalização), respectivamente.

Nos terminais Aforex, Diven FX, ForexClub, AlfaForex - sem problemas com o mesmo código.

Para Buy Stop and Take são contados a partir do preço da Licitação - este é um deles.

Segundo - como os preços de parada são calculados, eles precisam ser normalizados. A anterior normalização do SL e TP não é nada. Em seguida, na ordem comercial você substitui o valor não-normalizado da expressão.

Em terceiro lugar, todos os preços devem estar de acordo com as exigências e restrições comerciais. O nível StopLevel, por exemplo, pode ser maior do que o tamanho da ordem de parada.

 

Por favor, informe porque este é o caso.

Há três condições (em negrito), quando executada simultaneamente, uma ordem é aberta com sucesso.

int start()

{

int ot = OrderTotal();

int index=iHighest(NULL,0,MODE_HIGH,20,1);
int index1=iLowest(NULL,0,MODE_HIGH,20,1);
int index3=iLowest(NULL,0,MODE_HIGH,40,20);

if(Low[index1]==Low[1])

if(High[index]==High[20])

if(Low[index3]==Low[40]

se ( Bid==Low[40])

se (ot==0)

OrderSend(Symbol(),OP_SELL,0.1,Bid,1,Ask+1500*Point,Ask-300*Point, "jfh",123 )

PROBLEMA

Uma vez acrescentada uma quarta condição (marcada em vermelho), a ordem é aberta SOMENTE quando a quarta condição é cumprida.

Astrês condições anteriores são ignoradas pelo programa.

Eu tentei escrever as condições através de &&.... não funciona

Como fazer para que o mandado seja aberto quando todas as quatro condições forem cumpridas simultaneamente.

Obrigado.

 
solnce600:

Por favor, informe porque este é o caso.

Há três condições (destacadas em negrito) que, quando executadas ao mesmo tempo, abrem uma ordem com sucesso.

int start()

{

int ot = OrderTotal();

int index=iHighest(NULL,0,MODE_HIGH,20,1);
int index1=iLowest(NULL,0,MODE_HIGH,20,1);
int index3=iLowest(NULL,0,MODE_HIGH,40,20);

if(Low[index1]==Low[1])

if(High[index]==High[20])

if(Low[index3]==Low[40]

se ( Bid==Low[40])

se (ot==0)

OrderSend(Symbol(),OP_SELL,0.1,Bid,1,Ask+1500*Point,Ask-300*Point, "jfh",123 )

PROBLEMA

Assim que eu acrescentar uma quarta condição (marcada em vermelho), a ordem abre quando a quarta condição é cumprida SOMENTE.

O programa ignoraas três condições anteriores.

Eu tentei escrever as condições através de &&.... não funciona

Como fazer para que o mandado fosse aberto de uma só vez, com a execução das quatro condições.

Obrigado.

Expandir os parênteses encaracolados como o algoritmo deve funcionar.
 
artmedia70:

Para Comprar, parar e levar são calculados a partir do preço de Licitação - este é um deles.

Em segundo lugar, se você calcular os preços de parada de pedidos, eles precisam ser normalizados. O fato de que SL e TP foram normalizados antes não é nada demais. Em seguida, na ordem comercial você substitui o valor não-normalizado da expressão.

Em terceiro lugar, todos os preços devem cumprir com os requisitos e restrições para as operações comerciais. O nível do StopLevel, por exemplo, pode ser maior do que o tamanho da ordem de parada.



na alpari desde ontem passou para a execução no mercado, ou seja

Primeiro comprar/vender sl=0;tp=0; depois modificar sl=100;tp=300;

 
AlexeyVik:
Expandir os suportes encaracolados como o algoritmo deve funcionar.

Obrigado.
 
pako:


na alpari desde ontem passou para a execução no mercado, ou seja

primeiro comprar/vender sl=0;tp=0; depois modificar sl=100;tp=300;

Isto também está no mesmo lugar. É claro - uma não contradiz a outra. Conta as ordens de parada para comprar da Ask. Ela não os normaliza. Não verifica o limite de distância StopLevel.

Em resumo - um hodgepodge.

 
Ótimo, as perguntas são eliminadas, ótimo.
 
pako:


A Alpari mudou para a execução do mercado desde ontem, ou seja

primeiro comprar/vender sl=0;tp=0; depois modificar sl=100;tp=300;


Obrigado pelos conselhos. Vou investigar isso. A mudança para execução no mercado significa que as ordens pendentes também devem ser colocadas com zero paradas e lucros e depois modificadas?