Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 41
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Sim, você está certo, é que o código está escrito em um estilo tal que o orador anterior o interpretou mal.
E para verificar?
//| TestLogics.mq4 |
//| Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//| https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link "https://login.mql5.com/ru/users/artmedia70"
#property version "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int Value=0; // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
if(Value>0) Alert("1. Количество ордеров=",Value);
else Alert("2. Это код после else");
{
Alert("3. Ордера отсутствуют");
}
}
//+------------------------------------------------------------------+
E verificar?
Nossa, realmente, agora eu revisei o código original novamente, e estava errado. O estilo de escrita é meio tortuoso - me confundiu.
Voltou a verificar, retirou o "extra".
divisão por zero não foi a lugar algum
Voltou a verificar, retirou o "extra".
divisão por zero não foi a lugar algum
Voltou a verificar, retirou o "extra".
A divisão por zero não desapareceu
Porque não há verificação se o divisor é diferente de 0. Qual é a vantagem de executar mais código quando não há ordens e 0 lotes?
Verificar
{
double avg_price=0;
price=0;
bool z=true;
double orderlots=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) { return; } // если ничего нет - выходим
avg_price=NormalizeDouble(price / orderlots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
for(i=OrdersTotal()-1; i>=0; i--)
{
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
&& (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))
z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
if (!z)
Print("Ошибка функции модифицирования");
}
}
Verificar
Mas eu perdi os lotes, obrigado.
Não há problema em nãoler a revista, ela diz tudo ali.
Eu não ia lê-lo. Diz "para verificar no mercado". Meus produtos nunca estarão no mercado.
sobre a divisão por zero.
o que dizer do acima? É suposto que seja apartir daí.
{
price+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) {retornar; }// se não houver nada, sair
avg_price=NormalizeDouble(preço / parcelas de pedidos,Dígitos);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELLL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
Eu não ia lê-lo. Diz "para testar no mercado". Meus produtos nunca estarão no mercado.
Estou falando da revista no testador
Adicionado: Monte o código em seu estado normal, revise-o, depois execute-o no testador e leia os erros no registro. Você está me dando pedaços de código aqui.