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 513

 

Estou fazendo isso bem.

y = OrderOpenPrice()-Ask;

Eu subtraio o preço atual do preço do último pedido aberto?

int i_buy=0; int i_sell=0;

for(int i=0;i<OrdersTotal();i++){

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderSymbol()==Symbol()){

switch(OrderType()){// Есть ли открыте ордера

case OP_BUY:

i_buy++;

break;

case OP_SELL:

i_sell++;

break;

}

y = OrderOpenPrice()-Ask;

}

}


if((i_buy==0 && i_sell==0) || y > Step) //--- нет открытых ордеров, открываем или расстояние от последнего ордера до текущей цены. Больше step

OrderSend(Symbol(), OP_BUY,StartLot,Ask,Slippage,0,Ask+TakeProfit*Point(),WindowExpertName()+" "+(string)0,0,0,clrBlue);


 
woin2110:

https://docs.mql4.com/ru/trading/orderselecthttps://docs.mql4.com/ru/trading/orderopenprice https://docs.mql4.com/ru/trading/orderlots

duplo z; //declararregar a variável "z
duplo y; //declararregar a variável "y


if(OrderSelect(10,SELECT_BY_POS)==verdadeiro) // se a ordem selecionada (por bilhete) estiver presente

{

OrderLots()=z //atribuir o lote para esta ordem para a variável "z".

OrderOpenPrice()=y //atribuir o preço aberto à variável "y".

}

tente isto

Só não confunda as pessoas e diga besteiras, por favor. Você diz por bilhete, mas você escreve a seleção por índice. E se você selecionar por bilhete, não precisa especificar o pool - a função o ignora e o seleciona em qualquer uma das duas listas - naquela em que se encontra. E para verificar de qual lista a ordem é selecionada, devemos verificar o tempo de fechamento da ordem após a seleção bem sucedida e se é maior que zero - então a ordem já foi fechada, caso contrário - ela é selecionada da lista de posições abertas

Você não está atribuindo o valor do lote a uma variável, e vice-versa - você está tentando atribuir o valor da variável à função que devolve o lote da ordem selecionada - isso é um absurdo

Exatamente a mesma coisa que você está tentando fazer com a função que retorna o preço de abertura.

 

artmedia70:

Diga-me o que estou fazendo de errado. Tudo parece estar correto.

if((i_buy==0 && i_sell==0) |||| y > Etapa)

Ou (i_buy==0 && i_sell==0) ou y > Step. Se qualquer uma delas for verdadeira. Em seguida, pulamos e abrimos um pedido.

 
evillive:

Se Alpari - você nunca poderia. Se outra empresa de corretagem, depende da conta. Se tivermos uma boa relação de trabalho com a Alpari, teremos uma melhor compreensão do mercado. Os termos de troca devem ser estudados antes de começar a fazer algo, está tudo escrito ali.

O helpdesk 8-800-200-01-31 explicou que no final da semana passada eles tinham consertado um bug que permitia a abertura de pedidos em contas ECN ao mesmo tempo em que SL e TP eram configurados. Eu fechei a última posição na quinta-feira.

Você está certo no fato de que as regulamentações comerciais não dizem nada sobre isso e que somente OrderModify() economizará agora.

Obrigado pela resposta.

 
Zolotai:

artmedia70:

Diga-me o que estou fazendo de errado. Tudo parece estar correto.

if((i_buy==0 && i_sell==0) |||| y > Etapa)

Ou (i_buy==0 && i_sell==0) ou y > Step. Se qualquer uma delas for verdadeira. Em seguida, pulamos e abrimos um pedido.

Eu praticamente não entendo a pergunta...

Não sei o que nos falta, mas uma ordem pode ser aberta... Isto é, se esta condição for cumprida e uma ordem deve ser aberta, então

Posso lhe dizer o que diz aqui:

Se i_buy e i_sell forem ambos iguais a zero, uma ordem pode ser aberta. Ou, se algum deles não for igual a zero, ou talvez até ambos não sejam iguais, mas se y for maior que Step, então abra também uma ordem.

 
artmedia70:

Eu praticamente não entendo a pergunta...

Não sei o que nos falta, mas uma ordem pode ser aberta... Isto é, se esta condição for respeitada e uma ordem deve ser aberta.

Posso lhe dizer o que diz aqui:

"Abra um pedido se i_buy e i_sell forem ambos iguais a zero. Ou se algum deles não for igual a zero, ou talvez até ambos não sejam iguais, mas se y for maior que Step, então também deve ser aberta uma ordem.



Eu entendo corretamente no loop. Prosseguimos da primeira ordem aberta até a última. Por conseguinte, devemos tomar o preço do último pedido.

Há mais. Eu coloquei Alert("d") no OnTick. Eu executei o código no testador, mas não ouvi nenhum sinal sonoro nem janelas.

 
Zolotai:

No ciclo de bifurcação, entendo corretamente. Estamos indo da primeira ordem aberta até a última. De forma correspondente, tomo o preço do último pedido.

Eu também tenho isto. Eu coloquei Alert("d") no OnTick. Eu executei o código no testador, mas não ouvi nenhum sinal sonoro nem janelas.

Os alertas no testador são exibidos no registro do testador. Mas sobre o ciclo, saltar, selecionar, força bruta não é claro. Você pode obter a essência do que você quer que acabe com?
 

Boa tarde!

Como lutar com o "MetaEditor não encontrado" ao tentar editar um EA? MetaTrader build 600.

Parece que não me lembro de tal problema em construções mais antigas.

Pode ser explicado pelo fato de que o computador em que estou trabalhando é de baixa potência e carregado 50-75% do tempo. Tenho 7 instâncias MT4 rodando nele, mas em condições normais (isto é, sem carga externa como acesso via TeamViewer e tentando lançar o MetaEditor) seu desempenho é suficiente, e o Task Manager rodando em segundo plano mostra o uso de CPU avg <=45-50% durante 15-20 min.

Este problema não ocorre em 100% dos casos e o MetaEditor, após demonstrar paciência e persistência incomuns, funcionará todas as vezes da 5ª-10ª-25ª vez. Mas é realmente irritante tentar iniciar o MetaEditor por meia hora.

 
artmedia70:
Os alertas no testador são impressos no registro do testador. E quanto ao laço, saltar, selecionar e forçar o bruto não são claros. Você pode obter a essência do que você quer como resultado?


Eu só quero escrever o robô mais simples. Funciona por martin, por si só.

É aqui que reside o erro.

y = OrderOpenPrice()-Ask;

Eu não recebo números inteiros como eu pensava. Mas, por exemplo, 0,0044. Como eu consigo 44, um número inteiro?

 
Zolotai:


Eu só quero escrever o robô mais simples. Funciona por martin, por si só.

É aqui que reside o erro.

y = OrderOpenPrice()-Ask;

Eu não recebo números inteiros como eu pensava. Mas, por exemplo, 0,0044. Como eu consigo 44, um número inteiro?



int y = int((OrderOpenPrice()-Ask)/Point);
Razão: