Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 22

 
Artyom Trishkin:

О! Obrigado (risos) Não me dei conta disso pela manhã... No entanto, ainda é preciso fazer uma verificação para as matrizes de enchimento. Na Quatermass não se reuniram, e em Five muitas vezes não foram preenchidos os dados na primeira vez devido à falta de dados históricos.

ZS. Você deve dormir mais - seus pensamentos vão trabalhar nessa direção.

Bem, você pode colocá-lo em um loop

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

ou mesmo

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

para copiar exatamente o valor solicitado.


ps; enquanto fui servir chá, tive outra idéia, usar CopyRates() e um conjunto de estruturas MqlRates[] mas sou preguiçoso demais para reescrever algo.

 
Alexey Viktorov:

Bem, você também poderia colocá-lo em um loop

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 0);

ou mesmo

do while(CopyOpen(_Symbol, PERIOD_CURRENT, 1, 15, openCandle) < 15);

para copiar exatamente o número de cópias solicitadas.


ps; enquanto bebia chá, tive outra idéia - usar CopyRates() e uma gama de estruturas MqlRates[] mas sou preguiçoso demais para reescrevê-lo.

Não é a maneira que eu propus?
 
giannis1386:
Ajude-me a verificar outras condições de venda.
int start()
{
//+--------------------------------------------------------------------+
//|   -= stop loss в без убыток =-                                      |
//+--------------------------------------------------------------------+
bool   result;
double stop;
int    cmd,error;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderProfit()>pOPCS)
{
cmd=OrderType();
double blevel=OrderStopLoss()<Bid-Point*TS;
double slevel=OrderStopLoss()>Ask+Point*TS;
//---
if(cmd==OP_BUY || cmd==OP_SELL)
{
while(true)
{
if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
result=OrderModify(OrderTicket(),OrderOpenPrice(),stop,0,0,Orange);
if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
else error=0;
if(error==135) RefreshRates();
else break;
}
}
}
}

Tem uma lógica estranha. Mas mesmo se você não olhar para a lógica estranha, então:

Aqui você tem duas condições para Comprar, e todo o resto para Vender.

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;
 
Artyom Trishkin:

Sua lógica é estranha. Mas mesmo se você não olhar para a lógica estranha, então:

Aqui você tem duas condições verificadas para Comprar, e todo o resto para Vender

if(cmd==OP_BUY && blevel) stop=Bid-Point*TS;
else                      stop=Ask+Point*TS;

Tentei anexarslevel=OrderStopLoss()>Ask+Point*TS for Sell;

Mas como eu não sou uma pista sobre programação, nada de útil saiu. Eu espreitei os fóruns durante uma semana.

Por que a lógica estranha?) O código não é inteiramente meu.

 
giannis1386:

Eu tentei adicionarslevel=OrderStopLoss()>Ask+Point*TS;

Há uma semana que ando bisbilhotando nos fóruns. Todas as minhas tentativas acabaram com o Sell Stop movendo-se junto com o preço.

Por que a lógica estranha?) O código não é todo meu. Eu o retrabalhei o melhor que pude.

Por que você não escreve primeiro as condições sob as quais as paradas de Venda e Compra devem ser mudadas?

E então, depois de pensar sobre isso, escreva em seu código o que está escrito no deslize.

 
Artyom Trishkin:

E antes de tudo, escreva em um pedaço de papel com um lápis as condições sob as quais você precisa mudar a parada Comprar e parar de Vender.

E então, depois de ter pensado nisso, escreva no código o que está escrito no pedaço de papel.

slevel=OrderStopLoss()>Ask+Point*TS; isto é o que parece para uma posição de Venda.
 
giannis1386:
slevel=OrderStopLoss()>Ask+Point*TS; bem, parece ser o certo. Ou é errado? Eu sou novo nisso.

Você entende ao menos o que está escrito nesta condição? Esta é uma atribuição de zero ou um para uma variável do tipo duplo

O que você quer obter?

 
Artyom Trishkin:

Você entende ao menos o que está escrito nesta condição? É uma atribuição de zero ou um para uma variável do tipo duplo

O que você quer alcançar?

Aqui está o que eu revejo.

Verificar condição - não para mover SL para frente e para trás, mas apenas em uma direção.

Por exemplo, para um pedido de COMPRA, sua fórmula

OrderStopLoss()<bid-point*TrailingStop

Usando este exemplo, eu o fiz para a Sel.

 
giannis1386:

aqui está o que li.

Verificar condição - não para mover SL para frente e para trás, mas apenas em uma direção

Por exemplo, para um pedido de COMPRA, sua fórmula

OrderStopLoss()<bid-point*TrailingStop

Usando este exemplo, eu o colei para uma posição de Venda.

Portanto, você precisa assim:

em russo... se a ordem de parada for menor que o preço de Bid menos a distância de parada de rastreio, então ... sua ação

E você atribui à variável o resultado desta expressão lógica - ou seja, zero ou um.

 
Artyom Trishkin:

Portanto, você precisa disto:

em russo... se a ordem de parada for menor que o preço de Bid menos a distância de parada de rastreio, então ... suas ações

E você atribui à variável o resultado desta expressão booleana - ou seja, zero ou um.

Estou completamente confuso.

double blevel=OrderStopLoss()<Bid-Point*TS; funciona para mim. SL vai atrás do preço somente em lucro.

double slevel=OrderStopLoss()>Ask+Point*TS; eu não sei como adicionar este a outro

eles não são um bool.

Razão: