Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 41
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Sì, hai ragione, è solo che il codice è scritto in uno stile tale che il precedente interlocutore lo ha interpretato male.
E per controllare?
//| 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 controllare?
Cavolo, davvero, ora ho rivisto il codice originale e mi sono sbagliato. Lo stile di scrittura è un po' storto - mi ha confuso.
Ricontrollato, rimosso l'"extra".
ladivisione per zero non è andata da nessuna parte
Ricontrollato, rimosso l'"extra".
ladivisione per zero non è andata da nessuna parte
Ricontrollato, rimosso l'"extra".
La divisione per zero non è scomparsa
Perché non c'è nessun controllo se il divisore è diverso da 0. Che senso ha eseguire ulteriore codice quando non ci sono ordini e 0 lotti?
Metti un controllo su di esso
{
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("Ошибка функции модифицирования");
}
}
Metti un controllo su di esso
Ma mi mancavano i lotti, grazie.
Va bene perderselo, non va bene nonleggere la rivista, è tutto lì.
Non avevo intenzione di leggerlo. Dice 'controllare nel mercato'. I miei prodotti non saranno mai sul mercato.
sul dividere per zero.
e quello sopra? Si suppone che si prendada lì.
{
prezzo+=OrderOpenPrice()*OrderLots();
orderlots+=OrderLots();
}
}
if(orderlots==0) {return; }// se non c'è niente, exit
avg_price=NormalizeDouble(price / orderslots,Digits);
if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);
Non avevo intenzione di leggerlo. Dice "da testare sul mercato". I miei prodotti non saranno mai sul mercato.
Sto parlando della rivista nel tester
Aggiunto: Assemblare il codice allo stato normale, rivederlo, poi eseguirlo nel tester e leggere gli errori nel log. Mi stai dando dei frammenti di codice qui.