mi sto avventurando nel mondo mql e metatrader. Ho scritto un semplice EA che usa l'oscillatore stocastico, e ho fatto del backtesting di due giorni per avere pochi segnali e poterli studiare singolarmente. Allego uno screenshot per comprendere meglio la situazione, ho due domande sul grafico:
01) il fatto che si aprano piu posizioni su una stessa candela è dovuto al fatto che devi chiudere la posizione prima di aprirne un'altra?
02) se sì, come dovrei fare a chiudere la posizione prima di aprirne un' altra? Ho provato a verificare se esistono posizioni aperte prima di lanciare orderSend() (verificando PositionsTotal()<1), ma non sta funzionando. Allego anche del codice così mi spiego meglio:
03) Dopo ogni operazione, AccountInfoDouble(ACCOUNT_PROFIT) mi restituisce sempre lo stesso risultato
...
if (PositionsTotal()<1) {
openOrder(signal);
}
...
void openOrder(string signal) {
MqlTradeRequest request={0};
MqlTradeResult response={0};
double tp = 0.0;
double sl = 0.0;
if (signal == "sell") {
double prezzo_corrente = SymbolInfoDouble(_Symbol,SYMBOL_BID);
tp = prezzo_corrente - 0.002;
sl = prezzo_corrente + 0.001;
request.price = prezzo_corrente;
request.type = ORDER_TYPE_SELL;
}
if (signal == "buy") {
double prezzo_corrente = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
tp = prezzo_corrente + 0.002;
sl = prezzo_corrente - 0.001;
request.price = prezzo_corrente;
request.type = ORDER_TYPE_BUY;
}
request.action = TRADE_ACTION_DEAL;
request.symbol =_Symbol;
request.volume = 0.01;
request.type_filling = ORDER_FILLING_FOK;
request.tp = tp;
request.sl = sl;
request.deviation = 5;
if (!PositionSelect(_Symbol)) {
bool risp = OrderSend(request, response);
if(!risp) {
PrintFormat("OrderSend error: %d", response.retcode);
} else {
PrintFormat("DONE: DEAL=%I64u ORDER=%I64u", response.deal,response.order);
Print("ACCOUNT PROFIT = ", AccountInfoDouble(ACCOUNT_PROFIT));
}
}
}
Scusate se il messaggio è un po lungo :D