Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 858

 

Buon pomeriggio.

L'indicatore nella finestra mostra fino a 5 cifre decimali.

Quando lo si usa in un Expert Advisor attraverso iCustom(Symbol(), PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0) mostra fino a 4 cifre decimali (impostate dal comando Print).

Come faccio ad avere 5 cifre nella scheda?

 
Stampate usando la funzione DoubleToString e otterrete le 5 cifre che volete. Se vuoi, puoi anche ottenere 8 caratteri.
 
AlexeyVik:
Stampate usando la funzione DoubleToString e otterrete le 5 cifre che volete. Se vuoi, puoi anche prenderne 8.
In altre parole, i calcoli dell'indicatore nell'Expert Advisor vengono eseguiti su 5 cifre, e Print taglia la quarta cifra quando viene visualizzata nel Journal?
 
Craft:
In altre parole, i calcoli dell'indicatore nell'Expert Advisor sono eseguiti con 5 cifre decimali e Print taglierà il risultato a 4 cifre decimali quando viene visualizzato nel Journal?

Il risultato del calcolo può avere fino a 16 cifre decimali se non è normalizzato:

Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна.
Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно указанном формате необходимо использовать функцию PrintFormat(). 

L'output del calcolo direttamente tramite Print non viene tagliato. C'è qualcos'altro nel codice, la normalizzazione, per esempio.




 

Questo è il punto, non c'è altro (normalizzazioni, ecc.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Stampa ("g_macd=",g_macd);

g_MACD ha un valore (del 1° buffer) nell'indicatore al 5° decimale, mentre Print nel log mostra un valore al 4° decimale, che non è accettabile.

Come risolvere questo problema?

 
Craft:

Questo è il punto, non c'è altro (normalizzazioni, ecc.):

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

Stampa ("g_macd=",g_macd);

g_MACD ha un valore (del 1° buffer) nell'indicatore al 5° decimale, mentre Print nel log mostra un valore al 4° decimale, che non è accettabile.

Come risolvere questo problema?

Guarda nel tuo codice, il problema è lì da qualche parte.

Per testarlo, ho eseguito un semplice script con la chiamata WPR e ho stampato il risultato della chiamata dell'indicatore:

 double wpr1=iWPR(NULL,0,1440,1);
 Print("WPR=",wpr1);

****2015.03.08 01:12:15	2015.03.06 22:59 **** EURUSD,H1: WPR=-99.1902834008098


L'indicatore stesso, come sapete, mostra valori con 4 cifre decimali nella sua finestra, ma per Expert Advisors mostra 13 e anche 14.

 
Pokrov:

Ciao, guarda il codice qui sotto, creazione dell'oggetto "Arrow" sul segnale, le frecce non vengono disegnate nel tester, anche se il log passa, e anche nel log all'avvio nel tester scrive un errore TestGenerator: unmatched data error (volume limit 412 at 2014.10.13 17:10 exceeded),

E durante i test dà un errore "Checking USDJPYm,M5 arrow: Error in object creation: code #4200" - ma credo che questo sia normale, perché all'inizio il programma trova che l'oggetto è stato creato, e dopo averlo cancellato, lo crea di nuovo. In generale, vi sarei grato per i vostri commenti alle domande.

Non giudicare strettamente come è scritto.


Gente, aiutatemi con le frecce, per favore!!!

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}
 
Pokrov:

Gente, aiutatemi con le frecce, per favore!!!

Capire questa linea.

bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);

Guarda dove è disegnata la freccia.

 
AlexeyVik:

Capire questa linea

Guarda dove è disegnata la freccia.

Ora ho le frecce e si spostano da un segnale all'altro in base ai punti,

Posso quindi analizzare l'innesco del segnale sul grafico?

 
Pokrov:

Grazie, Alexey! Mi ha aiutato, ora le frecce appaiono e si spostano da un segnale all'altro per punti, ma come faccio a far apparire le frecce e a farle rimanere al loro posto su ogni segnale?

Posso quindi analizzare l'innesco del segnale sul grafico?

Smetti di muoverti e disegnane di nuovi.