Cioè, faccio OrderSelect una volta e poi di nuovo dalla funzione... È una cosa incredibile...
Hai selezionato un ordine su un biglietto
Si va alla funzione che controlla il numero di ordini. Se c'è più di un ordine, tutti gli ordini disponibili sono selezionati uno per uno nel ciclo
Al ritorno dalla funzione, l'ordine selezionato sarà quello che si trovava per ultimo nella lista degli ordini nel terminale del cliente (non sarà necessariamente l'ordine selezionato al punto 1).
Poi si controlla il tempo di chiusura di un nuovo ordine, e si cerca di chiudere quello che si suppone sia stato selezionato dal biglietto, ma la sua selezione è già stata persa.
Semplice logica...
Guarda la sequenza delle operazioni che stai facendo.
Ovviamente, bisogna prima controllare la quantità, poi selezionare l'ordine richiesto, e poi eseguire le operazioni necessarie su di esso.
se ci sono possibili chiusure/cancellazioni durante la "revisione", è meglio guardare nella direzione opposta. Da OrdersTotal()-1 a 0 incluso.
Altrimenti potresti avere dei problemi :-)
Ho quasi scoperto il mio graal personale in questo modo una volta :-)
E la rimozione di vecchi ordini dalle "profondità del tempo" al presente (una volta ogni tanto, non tutti) ha sollevato la redditività del tester al cielo :-)
Siete entrati nella funzione per controllare il numero di ordini. Se c'è più di un ordine, tutti gli ordini disponibili saranno selezionati uno per uno per essere contati nel ciclo
Al ritorno dalla funzione, l'ordine selezionato sarà quello che si trovava per ultimo nella lista degli ordini nel terminale del cliente (non deve necessariamente essere l'ordine selezionato al punto 1).
Poi si controlla il tempo di chiusura di un nuovo ordine, e si cerca di chiudere quello che si suppone sia stato selezionato dal biglietto, ma la sua selezione è già stata persa.
Semplice logica...
Guarda la sequenza delle operazioni che stai facendo.
È ovvio che bisogna prima controllare la quantità, poi selezionare l'ordine giusto, e poi eseguire le operazioni necessarie su di esso
Per esempio, ho scoperto che il lotto minimo è 0,01.
come faccio a dedurre che il numero di cifre decimali è 2? per normalizzare il volume dell'ordine a due cifre decimali in seguito.
Prova questo.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 16.05.2008 |//| Описание : Возвращает нормализованное значение торгуемого лота. |//+----------------------------------------------------------------------------+//| Параметры: |//| lo - нормализуемое значение лота. |//| ro - способ округления ( False - в меньшую, |//| True - в большую сторону) |//| sy - наименование инструмента ("" или NULL - текущий символ) |//+----------------------------------------------------------------------------+double NormalizeLot(double lo, bool ro=False, string sy="") {
double l, k;
if (sy=="" || sy=="0") sy=Symbol();
double ls=MarketInfo(sy, MODE_LOTSTEP);
double ml=MarketInfo(sy, MODE_MINLOT);
double mx=MarketInfo(sy, MODE_MAXLOT);
if (ml==0) ml=0.1;
if (mx==0) mx=100;
if (ls>0) k=1/ls; else k=1/ml;
if (ro) l=MathCeil(lo*k)/k; else l=MathFloor(lo*k)/k;
if (l<ml) l=ml;
if (l>mx) l=mx;
return(l);
}
Все продукты Маркета перед публикацией проходят обязательную предварительную проверку, так как небольшая ошибка в логике советника или индикатора может привести к убыткам на торговом счете. Именно поэтому нами разработана серия базовых проверок, призванных обеспечить необходимый уровень качества продуктов Маркета. Если в процессе проверки...
C'è qualcosa di veramente sbagliato, però...
Cioè, faccio OrderSelect una volta e poi di nuovo dalla funzione... È una cosa incredibile...
Semplice logica...
Guarda la sequenza delle operazioni che stai facendo.
Ovviamente, bisogna prima controllare la quantità, poi selezionare l'ordine richiesto, e poi eseguire le operazioni necessarie su di esso.
in quale direzione vedete la matrice dell'ordine?
se ci sono possibili chiusure/cancellazioni durante la "revisione", è meglio guardare nella direzione opposta. Da OrdersTotal()-1 a 0 incluso.
Altrimenti potresti avere dei problemi :-)
Ho quasi scoperto il mio graal personale in questo modo una volta :-)
E la rimozione di vecchi ordini dalle "profondità del tempo" al presente (una volta ogni tanto, non tutti) ha sollevato la redditività del tester al cielo :-)
Semplice logica...
Guarda la sequenza delle operazioni che stai facendo.
È ovvio che bisogna prima controllare la quantità, poi selezionare l'ordine giusto, e poi eseguire le operazioni necessarie su di esso
L'ho fatto in questo modo:
Metti prima il conteggio dell'ordine e poi tutto il resto.
Grazie Artem. Devo il Graal ad esso. Questo era l'errore che mi stava uccidendo...
Come si calcola il numero di cifre decimali?
Per esempio, ho scoperto che il lotto minimo è 0,01.
come faccio a dedurre che il numero di cifre decimali è 2?
per normalizzare il volume dell'ordine con due cifre decimali.
Come si calcola il numero di cifre decimali?
Per esempio, ho scoperto che il lotto minimo è 0,01.
come faccio a dedurre che il numero di cifre decimali è 2?
per normalizzare il volume dell'ordine a due cifre decimali in seguito.
Prova questo.
Prova questo.
Perché offrire roba così vecchia?
Come calcolare il numero di cifre decimali?
Per esempio, ho imparato che il lotto minimo è 0,01.
Come posso scoprire che il numero di cifre decimali è 2?
Poi normalizzare il volume dell'ordine con due cifre decimali.
Ecco una funzione già pronta nell'articolo.
Non resta che aggiungere un'azione in funzione del risultato restituito da questa funzione.
Ho messo molto così
e lo scambio si apre con un volume di 1,11.
Quindi forse non c'è bisogno di normalizzare nulla?
Vedo che il terminale normalizza l'ordine al numero di decimali richiesto quando lo apro.
Forse non c'è bisogno di normalizzare nulla?
Se l'editore fa lo stesso - non c'è bisogno.
Vedo che il terminale normalizza l'ordine al numero corretto di decimali quando si apre.
Forse non c'è bisogno di normalizzare nulla?
Se volete ottenere un errore dopo l'altro, non normalizzate.
Se volete ottenere un errore dopo l'altro, non normalizzate.