Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 46
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
Salve.
Posso chiedere aiuto?
Come faccio a sapere che la perdita dall'inizio della giornata, per le posizioni chiuse era del 10%?
Questo Expert Advisor mostra in alto a sinistra la percentuale di profitto o perdita per un periodo impostato
//| test02.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum mode_type
{
BUY=OP_BUY,
SELL=OP_SELL,
ALL = -1
};
input string Symbols=NULL;
input int Magic=-1;//Identification number
input mode_type ModeType=ALL;
input ENUM_TIMEFRAMES TimeFrame=PERIOD_D1;
double procent=0.0;
double prev_balans=0.0;
double Profit=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
Profit=LastProfit(iTime(_Symbol,TimeFrame,0),Symbols,Magic,ModeType);
prev_balans=Balans(0,iTime(_Symbol,TimeFrame,0));
if(prev_balans!=0.0)procent=Profit/prev_balans*100.0;
Comment(
"\nTime = ",iTime(_Symbol,TimeFrame,0),
"\nProfit = ",DoubleToStr(Profit,2),
"\nprev_balans = ",DoubleToStr(prev_balans,2),
"\nprocent = ",DoubleToStr(procent,4)," %"
);
}
//+------------------------------------------------------------------+
double LastProfit(
datetime time, // Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
string symbol=NULL, // символ, если NULL то любой символ
int magic=-1, // идентификатор, если -1 то любой идентификатор
int cmd=-1 // торговая операция, если -1 любая торговая операция
)
{
double profit=0;
int total=OrdersHistoryTotal();
for(int i=total-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderSymbol()==symbol || symbol!=NULL)
{
if(OrderMagicNumber()==magic || magic==-1)
{
if(OrderType()==cmd || cmd==-1)
{
if(OrderCloseTime()<time)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
return(profit);
}
//+------------------------------------------------------------------+
double Balans(
datetime start_time,// C какой даты. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
datetime stop_time,// По какую дату. Дата, представленная в виде количества секунд, прошедших после 00:00 1 января 1970 года.
)
{
double profit=0;
int total=OrdersHistoryTotal();
for(int i=0; i<total; i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
if(OrderCloseTime()<start_time || OrderCloseTime()>stop_time)continue;
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
return(profit);
}
//+------------------------------------------------------------------+
...
Questo consulente mostra in alto a sinistra la percentuale di profitto o perdita per un periodo stabilito
Grazie.
C'è una funzione che calcola il numero di posizioni perdenti per tutto il periodo.
Cosa posso cambiare per vedere il numero di posizioni perdenti chiuse oggi di fila?
{
int PosCnt = 0;
int cnt = HistoryTotal();
for (int i = cnt-1; i >=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
int type = OrderType();
if (type != OP_BUY && type != OP_SELL) continue;
if (OrderProfit()+OrderSwap()+OrderCommission() > 0) break;
PosCnt++;
}
return (PosCnt);
}
Grazie.
C'è una funzione che conta il numero di posizioni perdenti nel tempo.
Cosa devo cambiare per scoprire il numero di posizioni perdenti chiuse oggi di fila?
{
int PosCnt = 0;
int cnt = HistoryTotal();
for (int i = cnt-1; i >=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
int type = OrderType();
if (type != OP_BUY && type != OP_SELL) continue;
if (OrderProfit()+OrderSwap()+OrderCommission() > 0) break;
PosCnt++;
}
return (PosCnt);
}
Aggiungi un'altra condizione: se il tempo di chiusura dell'ordine è inferiore al tempo di apertura della candela D1 corrente, allora continua;
Grazie.
Grazie.
Non proprio così.
Come questo - OrderSymbol()
O come questo:
Non proprio così.
Come questo - OrderSymbol()
Grazie.
Caro. Per favore, consigliate come aggiungere del testo alla finestra dei parametri di input di EA.
input bool MetaQuotes = true;
input double MetaQuotes = 20.3;
input string MetaQuotes = "Corp";
input bool MetaQuotes = true;
input double MetaQuotes = 20.3;
input string MetaQuotes = "Corp";
Grazie + in rep. L'ho capito, ho letto il tutorial sulle variabili diinput esterne, non è descritto molto bene. È più chiaro ed evidente dall'esempio.
Grazie + in rep. L'ho capito, ho letto il tutorial sulle variabili diinput esterne, non è descritto molto bene. L'esempio è più chiaro e illustrativo.
Se aggiungi dei commenti ad ogni riga, sarà più interessante:
input bool MetaQuotes2 = true; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
e se fate un'enumerazione e la usate al posto di un bool, è ancora più interessante:
{
enYes = 1, // Да
enNo = 0, // Нет
};
input int MetaQuotes1 = 30; // Описание входного параметра 1
input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
input string MetaQuotes4 = "Corp"; // Описание входного параметра 4
e sinput permette di escludere una variabile dalla lista delle variabili per l'ottimizzazione. Per esempio, la variabile MetaQuotes4 in questo contesto non è necessaria per l'ottimizzazione, e può essere esclusa:
{
enYes = 1, // Да
enNo = 0, // Нет
};
input int MetaQuotes1 = 30; // Описание входного параметра 1
input enumYN MetaQuotes2 = enYes; // Описание входного параметра 2
input double MetaQuotes3 = 20.3; // Описание входного параметра 3
sinput string MetaQuotes4 = "Corp"; // Описание входного параметра 4