[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 397
Ha funzionato! Onestamente, ho avuto questa idea di sostituire OR con AND.... ma ... :)))))))))))))))))))))
Grazie! Ora capisco la logica, anche se per contare 15 chiusi, dovrò gonfiare il codice alle dimensioni di un palloncino!
Si può comprimere tutto in un solo ciclo e sostituire solo il parametro del numero di N trade necessari?
Questo è uno dei modi possibili per cercare N ordini chiusi più di recente, e gli ordini cercati possono essere filtrati per tipo (COMPRA, VENDI) e redditività (in perdita, redditizio):
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Ticket следующего перед fdt_Time закрытого ордера |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fGet_TicketLastClosePos (int fi_Type = -2, // OrderType()int fi_TypeProfit = 0, // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльныеdatetime fdt_Time = 0) // Точка отсчёта времени
{
datetime ldt_CloseTime = 0, ldt_LastTime = 0;
double ld_Profit = 0.;
int li_Ticket = 0, li_Total = OrdersHistoryTotal();
//----for (int li_ORD = li_Total - 1; li_ORD >= 0; li_ORD--)
{
//if (!fCheck_MyOrders (li_ORD, fi_Type, MODE_HISTORY)) continue;
// Здесь прописываете свою фильтрацию ордеров
ldt_CloseTime = OrderCloseTime();
//---- Пропускаем ордера, закрытые после указанной датыif (fdt_Time != 0) if (fdt_Time <= ldt_CloseTime) continue;
if (ldt_LastTime >= ldt_CloseTime) continue;
ld_Profit = OrderProfit();
//---- Фильтруем ордера по профитностиif (fi_TypeProfit > 0) if (ld_Profit < 0.) continue;
if (fi_TypeProfit < 0) if (ld_Profit > 0.) continue;
ldt_LastTime = ldt_CloseTime;
li_Ticket = OrderTicket();
}
//----return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Tickets N закрытых ордеров |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+int fGet_TicketsLastCloseOrd (int fi_NUM, // Количество искомых тикетовint& ar_Tickets[], // возвращаемый массив с тикетамиint fi_Type = -2, // OrderType()int fi_TypeProfit = 0) // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
{
int li_cnt = 0, li_Ticket;
datetime ldt_Time = 0;
//----for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
{
li_Ticket = fGet_TicketLastClosePos (fi_Type, fi_TypeProfit, ldt_Time);
if (li_Ticket > 0)
{
li_cnt++;
ArrayResize (ar_Tickets, li_cnt);
ar_Tickets[li_cnt-1] = li_Ticket;
OrderSelect (li_Ticket, SELECT_BY_TICKET);
ldt_Time = OrderCloseTime();
}
elsebreak;
}
//----return (li_cnt);
}
Dopo che la funzione fGet_TicketsLastCloseOrd() è chiamata e restituisce la quantità di biglietti trovati secondo i parametri specificati, potete (io lo farei) controllare con la quantità di biglietti specificata (fi_NUM) e il valore restituito dalla funzione. Tutti i biglietti raccolti saranno nell'array passato alla funzione per riferimento.
E in questa variante non è importante, quanti di questi ultimi biglietti vengono cercati. :)
E se hai bisogno di profitto da questi ultimi ordini chiusi, è ancora più facile:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+//| Автор : TarasBY, taras_bulba@tut.by |//+-----------------------------------------------------------------------------------+//| Функция получает Profit N последних закрытых ордеров |//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+double fGet_ProfitLastCloseOrd (int fi_NUM, // Количество просчитываемых ордеровint fi_Type = -2) // OrderType()
{
int li_Ticket;
double ld_Profit = 0.;
datetime ldt_Time = 0;
//----for (int li_IND = 0; li_IND < fi_NUM; li_IND++)
{
li_Ticket = fGet_TicketLastClosePos (fi_Type, 0, ldt_Time);
if (li_Ticket > 0)
{
OrderSelect (li_Ticket, SELECT_BY_TICKET);
ldt_Time = OrderCloseTime();
ld_Profit += (OrderProfit() + OrderSwap() + OrderCommission());
}
elsebreak;
}
//----return (ld_Profit);
}
Ecco uno dei possibili modi per cercare N biglietti degli ultimi ordini chiusi, e si possono filtrare gli ordini per tipo (COMPRA, VENDI) e per redditività (in perdita, redditizio):
Dopo che la funzione fGet_TicketsLastCloseOrd() è chiamata e restituisce la quantità di biglietti trovati secondo i parametri specificati, potete (io lo farei) controllare con la quantità di biglietti specificata (fi_NUM) e il valore restituito dalla funzione. Tutti i biglietti raccolti saranno nell'array passato alla funzione per riferimento.
E in questa variante non è importante quanti di questi ultimi biglietti vengono cercati. :)
E se hai bisogno di profitto da questi ultimi ordini chiusi, è ancora più facile:
Grazie mille. Mi prendo una pausa, devo capire cosa c'è...
Salve, aiutatemi a risolvere questo problema: voglio che un indicatore visualizzi eurobucks, indice del dollaro e indice dell'euro, ma i loro valori sono diversi per diversi ordini. Come posso portarli a valori dello stesso ordine? Basta aggiungere moltiplicatori - non credo che si adatti ai miei gusti...
tommy27: Salve, aiutatemi a risolvere questo problema: voglio che un indicatore visualizzi eurobucks, indice del dollaro e indice dell'euro, ma i loro valori sono diversi per diversi ordini. Come posso portarli a valori dello stesso ordine? Penso che non sia fattibile aggiungere dei moltiplicatori...
Impostare i valori minimi e massimi di tutti gli indicatori allo stesso modo
Buon giorno a voi, il mio consiglio a un professionista: ho scritto un indicatore che segnali che voglio utilizzare nel mio EA. Quale funzionerà più velocemente, la funzione indicatore o l'indicatore trasferito?
Zhunko: Se succede, non succederà presto, forse mai.
Grazie per la risposta.
Ma ho usato lo stesso confronto sospetto in altro codice per molto tempo.
E funziona con successo.
int start()
{
double Price=iOpen (Symbol (),0,0); int last_order_bar = 0;
int ot = OrdersTotal();
if (ot>0) //если есть ордера в рынке
{
if (OrderSelect (ot-1,SELECT_BY_POS))
if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )
last_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
}
int last_hist_order_bar = 0;
int oht = OrdersHistoryTotal();
if (oht>0)
{
if (OrderSelect (oht-1,SELECT_BY_POS, MODE_HISTORY))
if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)
last_hist_order_bar = iBarShift (Symbol (),0,OrderOpenTime ());
}
if (ot==0 || last_order_bar>0) if (oht==0 || last_hist_order_bar>0)
//===============================================================if(Bid==Price)if((Minute( ) ==45)&&(Minute( ) <50))
int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-1500*Point,Bid+150*Point,"jfh",123 );
}
return;
Non capisco perché questa condizione non funziona nell'ultimo caso. Non vedo differenze fondamentali tra questi codici.
Ha funzionato! Onestamente, ho avuto questa idea di sostituire OR con AND.... ma ... :)))))))))))))))))))))
Grazie! Ora capisco la logica, anche se per contare 15 chiusi, dovrò gonfiare il codice alle dimensioni di un palloncino!
Si può comprimere tutto in un solo ciclo e sostituire solo il parametro del numero di N trade necessari?
Questo è uno dei modi possibili per cercare N ordini chiusi più di recente, e gli ordini cercati possono essere filtrati per tipo (COMPRA, VENDI) e redditività (in perdita, redditizio):
Dopo che la funzione fGet_TicketsLastCloseOrd() è chiamata e restituisce la quantità di biglietti trovati secondo i parametri specificati, potete (io lo farei) controllare con la quantità di biglietti specificata (fi_NUM) e il valore restituito dalla funzione. Tutti i biglietti raccolti saranno nell'array passato alla funzione per riferimento.
E in questa variante non è importante, quanti di questi ultimi biglietti vengono cercati. :)
E se hai bisogno di profitto da questi ultimi ordini chiusi, è ancora più facile:
Ecco uno dei possibili modi per cercare N biglietti degli ultimi ordini chiusi, e si possono filtrare gli ordini per tipo (COMPRA, VENDI) e per redditività (in perdita, redditizio):
Dopo che la funzione fGet_TicketsLastCloseOrd() è chiamata e restituisce la quantità di biglietti trovati secondo i parametri specificati, potete (io lo farei) controllare con la quantità di biglietti specificata (fi_NUM) e il valore restituito dalla funzione. Tutti i biglietti raccolti saranno nell'array passato alla funzione per riferimento.
E in questa variante non è importante quanti di questi ultimi biglietti vengono cercati. :)
E se hai bisogno di profitto da questi ultimi ordini chiusi, è ancora più facile:
Grazie mille. Mi prendo una pausa, devo capire cosa c'è...
Salve, aiutatemi a risolvere questo problema: voglio che un indicatore visualizzi eurobucks, indice del dollaro e indice dell'euro, ma i loro valori sono diversi per diversi ordini. Come posso portarli a valori dello stesso ordine? Penso che non sia fattibile aggiungere dei moltiplicatori...
Impostare i valori minimi e massimi di tutti gli indicatori allo stesso modo
Buon giorno a voi, il mio consiglio a un professionista: ho scritto un indicatore che segnali che voglio utilizzare nel mio EA. Quale funzionerà più velocemente, la funzione indicatore o l'indicatore trasferito?
Grazie
Impostare min. e max. per tutti gli indicatori allo stesso modo
Quali... Voglio che tutto questo sia mostrato da un indicatore per 3 buffer di droline.
tommy27:
Come si fa a portarli a valori dello stesso ordine?
la scala dovrebbe essere la stessa
Sì, e per farlo, ha senso convertire tutti e tre i valori del buffer prima di visualizzarli così:
Xn=(X-Xmin)/(Xmax-Xmin)
Se lo si fa senza mezzi termini, si ottiene qualcosa che assomiglia a una linea orizzontale.
Beh, se usi il ridimensionamento di MQ, sei a posto.
Se succede, non succederà presto, forse mai.
Grazie per la risposta.
Ma ho usato lo stesso confronto sospetto in altro codice per molto tempo.
E funziona con successo.
Non capisco perché questa condizione non funziona nell'ultimo caso. Non vedo differenze fondamentali tra questi codici.