Buona sera. Ho cercato di mostrarlo nella foto per chiarezza. Supponiamo che io abbia "Dodge", quando il prezzo della barra successiva è superiore al massimo "Dodge" - compro, T/P, diciamo 15 punti, e il prezzo sulla stessa barra e sale e l'ordine (Buy_2) con T/P di 15 punti si apre di nuovo, e non ho bisogno diquesta 2a apertura (Buy_2) sulla 1a barra dopo il "Dodge". Come eliminare questo malinteso?
Sono in perdita - l'indicatore BB sta dando segnali che non capisco (non "rosso-verde-rosso"!). Per essere più preciso, sto dando la seguente chiamata:
L'essenza della strategia: entrata tramite segnale stocastico (5,14,3) uscita anche tramite stocastico ma con un altro periodo (5,3,3). Non capisco come fare un'uscita dallo stocastico e non dal segnale inverso. Ho un problema e non ho idea di come possa essere risolto, cercherò di spiegarlo. Quindi, nel codice che ho postato, ci sono 2 funzioni
//+------------------------------------------------------------------+//| подготовить массив тикетов для закрытия |//+------------------------------------------------------------------+void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9])
{
int size=ArrayRange(arrayTickets,0);
//----if (size==0) return;
int i,type,ticket,closeSize;
for (i=0;i<size;i++)
{
type=arrayTickets[i][1];
// если тип ордера не рыночный, то пропускаемif (type>OP_SELL) continue;
if (Revers) // перевернем тип рыночного ордера
{
if (type==OP_BUY) type=OP_SELL; else type=OP_BUY;
}
// тут решаем для каждого открытого ордера его судьбу// оставить в рынке или добавить в массив на закрытиеif (type==OP_BUY)
{
//// код разрешающий оставить покупку// как примерif (signal==OP_BUY) continue;
}
if (type==OP_SELL)
{
//// код разрешающий оставить продажу// как примерif (signal==OP_SELL) continue;
}
closeSize=ArrayRange(ticketsClose,0);
ArrayResize(ticketsClose,closeSize+1);
ArrayResize(lots,closeSize+1);
ticketsClose[closeSize][0] = arrayTickets[i][0]; // # тикета
ticketsClose[closeSize][1] = arrayTickets[i][1]; // тип ордера// здесь укажем сколько лотов нужно закрыть
lots[closeSize] = arrayTickets[i][2]; // закрываемый объем// можно закрывать частично, тогда нужно переписать строку сверху
}
//----return;
}
//+------------------------------------------------------------------+//| Закрывает ордера с указанными тикетами |//+------------------------------------------------------------------+void CloseMarketOrders(int ticketsArray[][2], double lotsArray[])
{
//----int i,size=ArrayRange(ticketsArray,0);
if (size==0) return;
int ticket,type;
double lots;
bool res;
int total=OrdersTotal();
for (i=0;i<size;i++)
{
ticket = ticketsArray[i][0];
type = ticketsArray[i][1];
lots = lotsArray[i];
RefreshRates(); // на всякий случай обновим сведения о рыночном окружении// блок закрытия покупокif (type==OP_BUY)
{
res = OrderClose(ticket,lots,Bid,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в покупку #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
// блок закрытия продажif (type==OP_SELL)
{
res = OrderClose(ticket,lots,Ask,Slippage,Orange);
if (!res)
{
Print("Не удалось закрыть ордер в продажу #",ticket,"! Ошибка №",GetLastError());
// дальнейшая обработка ошибки, написать самостоятельно
}
}
}
//----return;
}
Nel void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) dobbiamo mettere una condizione che decida se dobbiamo lasciare o chiudere l'ordine... Ho provato a mettere delle condizioni ma non funziona niente.... Qualcuno può guardare e mostrare se c'è un errore in queste funzioni o se ho fatto casino....
Potete dirmi che se ho due comandi OrderSend consecutivi che impostano ordini, devo mettere la funzione IsTradeAllowed tra di loro?
o non è necessario e l'EA passerà dalla prima chiamata OrderSend alla seconda solo dopo un ordine piazzato con successo?
Nel tester non ce n'è bisogno, ma sul conto demo o reale si otterrà un messaggio su un filo di commercio occupato.
Desead:
Se IsTradeAllowed è ancora necessario, quale ritardo dovrebbe essere impostato nel ciclo while?
Dipende dalla velocità di esecuzione, che è diversa per i diversi server. Ricordatevi di aggiungere anche un controllo del ciclo su IsStopped(), altrimenti non avrete fortuna.
Ciao, potresti dirmi dove posso scaricare l'archivio delle quotazioni dettagliate (tick o minuto)? I dati che sono nell'archivio delle quotazioni in MT4 (non molto) dati al minuto solo per 5 giorni del test.
Buon pomeriggio. Il sistema fornisce tre punti di ingresso per comprare e vendere. Ma quando arriva un segnale, le posizioni vengono aperte su ogni tick finché il segnale esiste. C'è un errore da qualche parte con le bandiere. Per favore, aiutatemi a capire.
Buon pomeriggio. Il sistema fornisce tre punti di ingresso per comprare e vendere. Ma quando arriva un segnale, le posizioni vengono aperte su ogni tick finché il segnale esiste. C'è un errore da qualche parte con le bandiere. Per favore, aiutatemi a capire.
OrdersTotal() dà il numero di posizioni già aperte, cioè possiamo usarlo per controllare se c'è già una posizione aperta o no.
Buona sera. Ho cercato di mostrarlo nella foto per chiarezza. Supponiamo che io abbia "Dodge", quando il prezzo della barra successiva è superiore al massimo "Dodge" - compro, T/P, diciamo 15 punti, e il prezzo sulla stessa barra e sale e l'ordine (Buy_2) con T/P di 15 punti si apre di nuovo, e non ho bisogno diquesta 2a apertura (Buy_2) sulla 1a barra dopo il "Dodge". Come eliminare questo malinteso?
Cari professionisti e conoscitori!
Sono in perdita - l'indicatore BB sta dando segnali che non capisco (non "rosso-verde-rosso"!). Per essere più precisi, ho impostato tale chiamata:
bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boln = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Stampa("Bande superiori = ", bolup;)
Stampa("Bande inferiori = ", boldn);
Print("Bands media = ", bolmd);
Il risultato è che tutte e 3 le variabili danno lo stesso valore. >8-O
Coppia EUR, TF - H1. Qualche idea?
Grazie in anticipo...
Per chiarezza, ho cercato di disegnarne un'immagine su
Cari professionisti e conoscitori!
Sono in perdita - l'indicatore BB sta dando segnali che non capisco (non "rosso-verde-rosso"!). Per essere più preciso, sto dando la seguente chiamata:
bolup = iBands(Symbol(), 0, 24, 0, 2, 0, 1, 1);
boldn = iBands(Symbol(), 0, 24, 0, 2, 0, 2, 1);
bolmd = (bolup + boldn) / 2;
Print("Bands upper = ", bolup);
Print("Bands lower = ", boldn);
Print("Bands media = ", bolmd);
Di conseguenza, tutte e 3 le variabili danno lo stesso valore. >8-O
È EUR, H1. Qualche idea?
Grazie in anticipo...
Ho un problema e non ho idea di come possa essere risolto, cercherò di spiegarlo.
Quindi, nel codice che ho postato, ci sono 2 funzioni
Nel void PrepareTicketsToClose(int signal, bool Revers, int & ticketsClose[][2], double & lots[],double arrayTickets[][9]) dobbiamo mettere una condizione che decida se dobbiamo lasciare o chiudere l'ordine...
Ho provato a mettere delle condizioni ma non funziona niente....
Qualcuno può guardare e mostrare se c'è un errore in queste funzioni o se ho fatto casino....
Nel tester non ce n'è bisogno, ma sul conto demo o reale si otterrà un messaggio su un filo di commercio occupato.
Buon pomeriggio. Il sistema fornisce tre punti di ingresso per comprare e vendere. Ma quando arriva un segnale, le posizioni vengono aperte su ogni tick finché il segnale esiste. C'è un errore da qualche parte con le bandiere. Per favore, aiutatemi a capire.
Buon pomeriggio. Il sistema fornisce tre punti di ingresso per comprare e vendere. Ma quando arriva un segnale, le posizioni vengono aperte su ogni tick finché il segnale esiste. C'è un errore da qualche parte con le bandiere. Per favore, aiutatemi a capire.
OrdersTotal() dà il numero di posizioni già aperte, cioè possiamo usarlo per controllare se c'è già una posizione aperta o no.