Qual è la differenza tra Instant Executuion e Market Execution?
(Integer): Con Instant Executuion, un ordine può essere aperto con uno stop-loss e un take-profit preimpostati, impostare lo Slippage in pip, che permette di aprire un ordine quando il prezzo al momento della sua esecuzione da parte del broker si discosta dal prezzo richiesto dal trader. All'Esecuzione a Mercato non è possibile aprire un ordine con uno Stop Loss e/o Take Profit predeterminato, non esiste un parametro per lo Slippage. L'ordine viene aperto a qualsiasi prezzo disponibile al momento della sua esecuzione da parte del broker. Uno Stop Loss e/o un Take Profit possono essere impostati immediatamente dopo l'apertura dell'ordine. La maggior parte dei centri di negoziazione lavora in modalità di esecuzione immediata. Non molti centri di negoziazione operano nella modalità di esecuzione del mercato.
2. A proposito, com'è il glossario dei termini, il paziente è piuttosto vivo?
1. Non ho visto l'ultimo paragrafo delle FAQ sul link e ho reagito solo al post di granit77.
2. Ho letto la sezione in cui ho offerto il mio aiuto. Ma è quanto di più completo si possa desiderare. Non c'è praticamente nulla da aggiungere. Avrei dovuto segnalarlo prima - mi pento di non averlo fatto.
Ancora, la sezione può aggiungere abbreviazioni in gergo di termini che sono in uso da programmatori e commercianti. Ho appena iniziato un nuovo lavoro e ora ho pochissimo tempo libero, appena sufficiente per continuare almeno il mio progetto. Pertanto, scriverò gradualmente "su un pezzo di carta" e quando ne accumulerò di più, lo aggiungerò alla sezione. VA BENE?
Risposta: Dal punto di vista dell'ottimizzazione del codice, questo è l'approccio conveniente: prima, conduciamo la "revisione" degli ordini "amichevoli" (cioè gli ordini con il dato MagicNumber()), creiamo un array di ticket con tutte le informazioni riguardanti ogni ticket, e poi conduciamo tutti gli altri controlli (per chiudere e modificare le posizioni) con lo stesso array di ticket. Esempio #1. Raccogliere informazioni sui biglietti su una coppia di valute.
// Сначала объявляем массив в глобальных переменныхdouble gda_Tickets[30][10]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price
// gda_Tickets[][4] - OrderProfit
// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Не забываем о счётчике ордеров (он нам ещё понадобится)int gi_cnt_Tickets;
// сама функцияvoid fMyTickets (double& ar_Tickets[][10], int fi_Magic = -1)
{
int li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
//----for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol())
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
gi_cnt_Tickets = li_cnt;
//----return;
}
Se volete, potete dichiarare questa funzione di tipo int e farle restituire il numero di "ordini propri".
gi_cnt_Tickets = fMyTickets (gda_Tickets, Magic);
Se il nostro EA è multi-valuta. Esempio #2. Raccolta di informazioni sui biglietti per diverse coppie di valute.
Per controllare i simboli "amichevoli" in questo caso, abbiamo bisogno di un'altra piccola funzione:
// В глобальных переменных объявляем ещё одина массив, теперь с символами с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)// сама функцияint fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)int fi_Magic = -1) // MagicNumber
{
int NUM_Symbol, li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
//----for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic)
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- для дальнейших вычислений не лишним будет запомнить номер индекса символа в массиве символов
//---- но для этого не забудьте увеличить размер массива тикетов при его объявлении gda_Tickets[30][11]
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
}
}
//----return (li_cnt);
}
Domanda: Ottenere un array di biglietti d'ordine "propri
Risposta: (Continua)
Non c'è da stupirsi se vuoi che il tuo EA abbia statistiche aggiuntive sul suo lavoro, per esempio: il drawdown massimo, il profitto totale, ecc. Per non dover "disturbare" il server con ulteriori richieste, vi consigliamo di aggiungere funzionalità alla nostra funzione (scusate il gioco di parole). In questo caso la funzione può apparire come questa
Variante 1 per un EA di monocurrency:
// Объявляем массив в глобальных переменныхdouble gda_Tickets[30][10]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// Добавляем массив для сбора ститистикиdouble gda_AddInfo[5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[0] - количество соих ордеров (всех)// gda_AddInfo[1] - количество своих рыночных ордеров// gda_AddInfo[2] - общий размер открытых рыночных лотов// gda_AddInfo[3] - общий профит по открытым позициям// gda_AddInfo[4] - максимальная просадка по открытым позициямvoid fMyTickets (double& ar_Tickets[][10], // массив тикетов (для заполнения)double& ar_Info[], // массив для заполнения дополнительной информациейint fi_Magic = -1) // MagicNumber
{
int li_cnt = 0; // счетчик заполненияint li_total = OrdersTotal();
double tmp_Loss;
//----
tmp_Loss = ar_Info[4];
//---- Обнуляем заполняемый массив перед использованиемArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
//---- проверка на Symbolif (OrderSymbol() != Symbol())
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[0]++;
if (OrderType() < 2)
{
ar_Info[1]++;
ar_Info[2] += OrderLots();
ar_Info[3] += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
//---- Учитываем максимальную просадку
ar_Info[4] = MathMin (ar_Info[3], tmp_Loss);
//----return;
}
Variante #2 per la multi-valuta:
// В глобальных переменных объявляем массив, с символами, с которыми работает наш мультивалютный советникstring gsa_Symbols[];
// Массив с дополниетельной информацией должен быть 2-ух мерным// 1-ый индекс - это номер символа в массиве символов gsa_Symbols[]// Не забудьте перед его использованием задать ему размер в первом измерении равный количеству используемых символов// ArrayResize (gda_AddInfo, ArraySize (gsa_Symbols));double gda_AddInfo[][5]; // массив для хранения дополнительной информации по работе советника// gda_AddInfo[][0] - количество соих ордеров (всех)// gda_AddInfo[][1] - количество своих рыночных ордеров// gda_AddInfo[][2] - общий размер открытых рыночных лотов// gda_AddInfo[][3] - общий профит по открытым позициям// gda_AddInfo[][4] - максимальная просадка по открытым позициям// Для использования его в советнике, нужно предварительно задать его размер и заполнить символами// (как это сделать - отдельная тема)void fMyTickets (string ar_Symbol[], // заполненный массив рабочих символовdouble& ar_Tickets[][11], // массив тикетов (для заполнения)double& ar_Info[][5], // массив для заполнения дополнительной информациейint fi_Magic) // MagicNumber
{
int NUM_Symbol, li_cnt = 0, li_Range = ArraySize (ar_Symbol); // счетчик заполненияint li_total = OrdersTotal();
string ls_Sym;
double tmp_Loss[];
//----//---- Инициализируем временный массив для хранения сведений о максимальной просадкеArrayResize (tmp_Loss, li_Range);
//---- Сохраняем в него эти сведенияfor (int li_int = 0; li_int < li_Range; li_int++)
{tmp_Loss[li_int] = ar_Info[li_int][4];}
//---- Обнуляем используемый массив
ArrayInitialize (ar_Info, 0.0);
for (int li_int = li_total - 1; li_int >= 0; li_int--)
{
if (OrderSelect (li_int, SELECT_BY_POS))
{
ls_Sym = OrderSymbol();
//---- Определяем номер символа в массиве (фильтр по Symbol)
NUM_Symbol = fGetNumElementInArray_STR (ar_Symbols, ls_Sym);
//---- Если ордер не "свой" - пропускаемif (NUM_Symbol < 0)
{continue;}
//---- проверка MagicNumberif (OrderMagicNumber() != fi_Magic
&& fi_Magic >= 0) // предусматриваем возможность контролтровать любой Magic
{continue;}
//---- заполняем массив
ar_Tickets[li_cnt][0] = OrderTicket();
ar_Tickets[li_cnt][1] = OrderType();
ar_Tickets[li_cnt][2] = OrderLots();
ar_Tickets[li_cnt][3] = OrderOpenPrice();
ar_Tickets[li_cnt][4] = OrderProfit() + OrderSwap() + OrderCommission();
ar_Tickets[li_cnt][5] = OrderStopLoss();
ar_Tickets[li_cnt][6] = OrderTakeProfit();
ar_Tickets[li_cnt][7] = OrderOpenTime();
ar_Tickets[li_cnt][8] = OrderMagicNumber();
ar_Tickets[li_cnt][9] = OrderExpiration();
ar_Tickets[li_cnt][10] = NUM_Symbol;
//---- увеличим счётчик заполненных тикетов
li_cnt++;
//---- заполняем массив дополнительной информацией
ar_Info[NUM_Symbol][0]++;
if (OrderType() < 2)
{
ar_Info[NUM_Symbol][1]++;
ar_Info[NUM_Symbol][2] += OrderLots();
ar_Info[NUM_Symbol][3] += OrderProfit() + OrderSwap() + OrderCommission();
ar_Info[NUM_Symbol][4] = MathMin (tmp_Loss[NUM_Symbol], ar_Info[NUM_Symbol][3]);
}
}
}
//----return;
}
Negli esempi precedenti sulla raccolta di informazioni sui biglietti, queste informazioni sono sufficienti nella stragrande maggioranza dei casi. Ma in sistemi più complessi, nessuno vi vieta di memorizzare le informazioni su di loro in un array di biglietti, per esempio, se gli stop virtuali sono implementati nel vostro Expert Advisor:
double gda_Tickets[30][12]; // массив для хранения информации о "своих" ордерах:// gda_Tickets[][0] - Ticket// gda_Tickets[][1] - Type// gda_Tickets[][2] - Lots// gda_Tickets[][3] - Open Price// gda_Tickets[][4] - Order Profit// gda_Tickets[][5] - Stop Loss// gda_Tickets[][6] - Take Profit// gda_Tickets[][7] - Open Time// gda_Tickets[][8] - MagicNumber// gda_Tickets[][9] - Expiration Time// gda_Tickets[][10] - Virtual SL// gda_Tickets[][11] - Virtual TP
In generale, qui si è limitati solo dal volo di fantasia / fanatismo e dal livello di conoscenza di MQL4.
Per non "disturbare" inutilmente il server con richieste...
Il server non viene disturbato durante la raccolta degli ordini. L'ideologia di raccogliere le informazioni dell'ordine in un array è UG. Non c'è modo che questo sia nelle FAQ.
TheXpert: Il server non viene disturbato durante la raccolta degli ordini. L'ideologia di raccogliere informazioni sugli ordini in una matrice -- UG. Questo non è assolutamente permesso nelle FAQ.
Suggerisci un'altra opzione. per la necessità di lavorare con ordini "propri
Non lo suggerirei. Il più delle volte, una serie di biglietti non è affatto necessaria. E la cosa giusta da fare, imho, è chiedere sempre al terminale le informazioni più aggiornate possibili.
(Integer ): Con Instant Executuion, un ordine può essere aperto con uno stop-loss e un take-profit preimpostati, impostare lo Slippage in pip, che permette di aprire un ordine quando il prezzo al momento della sua esecuzione da parte del broker si discosta dal prezzo richiesto dal trader. All'Esecuzione a Mercato non è possibile aprire un ordine con uno Stop Loss e/o Take Profit predeterminato, non esiste un parametro per lo Slippage. L'ordine viene aperto a qualsiasi prezzo disponibile al momento della sua esecuzione da parte del broker. Uno Stop Loss e/o un Take Profit possono essere impostati immediatamente dopo l'apertura dell'ordine. La maggior parte dei centri di negoziazione lavora in modalità di esecuzione immediata. Non molti centri di negoziazione operano nella modalità di esecuzione del mercato.
Sempre più società di intermediazione stanno passando alla Market Execution. Presto le informazioni fornite da Integer diventeranno irrilevanti.
sono solo informazioni sulle due modalità.
ed è esattamente quello che dice l'ultimo paragrafo delle FAQ - una tendenza! https://www.mql5.com/ru/forum/131853/page3#464977
-------
A proposito, com'è il glossario dei termini, il paziente è piuttosto vivo?
1. e l'ultimo paragrafo delle FAQ dice esattamente questo - tendenza! https://www.mql5.com/ru/forum/131853/page3#464977
-------
2. A proposito, com'è il glossario dei termini, il paziente è piuttosto vivo?
1. Non ho visto l'ultimo paragrafo delle FAQ sul link e ho reagito solo al post di granit77.
2. Ho letto la sezione in cui ho offerto il mio aiuto. Ma è quanto di più completo si possa desiderare. Non c'è praticamente nulla da aggiungere. Avrei dovuto segnalarlo prima - mi pento di non averlo fatto.
Ancora, la sezione può aggiungere abbreviazioni in gergo di termini che sono in uso da programmatori e commercianti. Ho appena iniziato un nuovo lavoro e ora ho pochissimo tempo libero, appena sufficiente per continuare almeno il mio progetto. Pertanto, scriverò gradualmente "su un pezzo di carta" e quando ne accumulerò di più, lo aggiungerò alla sezione. VA BENE?
Domanda: ottenere un array di ordini "propri
Risposta: Dal punto di vista dell'ottimizzazione del codice, questo è l'approccio conveniente: prima, conduciamo la "revisione" degli ordini "amichevoli" (cioè gli ordini con il dato MagicNumber()), creiamo un array di ticket con tutte le informazioni riguardanti ogni ticket, e poi conduciamo tutti gli altri controlli (per chiudere e modificare le posizioni) con lo stesso array di ticket.Esempio #1. Raccogliere informazioni sui biglietti su una coppia di valute.
Se volete, potete dichiarare questa funzione di tipo int e farle restituire il numero di "ordini propri".
Se il nostro EA è multi-valuta.
Esempio #2. Raccolta di informazioni sui biglietti per diverse coppie di valute.
Per controllare i simboli "amichevoli" in questo caso, abbiamo bisogno di un'altra piccola funzione:
e la nostra funzione avrà questa forma:
Domanda: Ottenere un array di biglietti d'ordine "propri
Risposta: (Continua)
Non c'è da stupirsi se vuoi che il tuo EA abbia statistiche aggiuntive sul suo lavoro, per esempio: il drawdown massimo, il profitto totale, ecc. Per non dover "disturbare" il server con ulteriori richieste, vi consigliamo di aggiungere funzionalità alla nostra funzione (scusate il gioco di parole). In questo caso la funzione può apparire come questa
Variante 1 per un EA di monocurrency:
Variante #2 per la multi-valuta:
Negli esempi precedenti sulla raccolta di informazioni sui biglietti, queste informazioni sono sufficienti nella stragrande maggioranza dei casi. Ma in sistemi più complessi, nessuno vi vieta di memorizzare le informazioni su di loro in un array di biglietti, per esempio, se gli stop virtuali sono implementati nel vostro Expert Advisor:
In generale, qui si è limitati solo dal volo di fantasia / fanatismo e dal livello di conoscenza di MQL4.
TarasBY
Per non "disturbare" inutilmente il server con richieste...
Il server non viene disturbato durante la raccolta degli ordini. L'ideologia di raccogliere informazioni sugli ordini in una matrice -- UG. Questo non è assolutamente permesso nelle FAQ.
Suggerisci un'altra opzione. per la necessità di lavorare con ordini "propri