Errori, bug, domande - pagina 949

 
Renat:
Avete uno strano atteggiamento nei confronti del terminale e delle risorse.

Il terminale di trading non ha il compito di risparmiare risorse quando il suo compito principale è quello di lavorare efficacemente con enormi quantità di dati. Inoltre, non ci si può lamentare che quattro copie del "number cruncher" non abbiano abbastanza gigabyte di memoria nel VPS.

Non è questo il problema, ma il diverso comportamento sul server Win2003x64 (VPS) e Win7x64 Home.

http://file.karelia.ru/6v55j5/ il video sul link dice che quando si avvia il terminale, consuma molta più memoria allocata di quella che il sistema operativo mostra per questo processo.

 
olyakish:

Non è questo il problema, ma il diverso comportamento sul server Win2003x64 (VPS) e Win7x64 Home.

http://file.karelia.ru/6v55j5/ il video sul link dice che all'avvio del terminale consuma molta più memoria allocata di quella che il sistema operativo mostra per questo processo.

Oh, come tutto corre.

Troppo lungo da spiegare e non ha niente a che vedere con il terminale. Lascia perdere e non lesinare sul VPS.

 
Renat:

Oh, com'è incasinato.

Troppo lungo da spiegare e non ha niente a che vedere con il terminale. Lascia perdere e non lesinare sul VPS.

Forse non così tanto.

Per esempio, può essere che il terminale raccolga servizi di terzi che consumano più del terminale stesso. E sul mio portatile sono solo inizialmente all'avvio,

Allora perché la memoria consumata è simile alla prima esecuzione del terminale - è sufficiente per eseguire il servizio una volta. (anche se è discutibile se il servizio può eseguire thread per ogni copia del terminale)

OK, chiederò in un altro modo, se il server è 2008 su una VPN non avrà questo effetto se è troppo lungo da spiegare.

 
olyakish:

Forse non così tanto.

Per esempio, può essere che il terminale raccolga servizi di terzi che consumano più del terminale stesso. Sul mio portatile sono solo inizialmente all'avvio,

allora perché il consumo di memoria è simile alla prima esecuzione del terminale - il servizio deve essere eseguito solo una volta. (anche se è discutibile se il servizio può avviare thread per ogni copia del terminale)

Ok chiederò in un altro modo, se il server è 2008 su pps non avrà questo effetto se è troppo lungo da spiegare.

Ho sul VPS (Win XP) circa 200 MB consumati dal terminale MT4.
 
Perché non permettere (con un segno di spunta nelle impostazioni) al terminale di usare uno swap di cache? Ci sarà un compromesso velocità/carico di memoria selezionabile dall'utente.
 

...Sembra un'operazione semplice, ma non è possibile ottenere i valori interi corretti in pip. Ecco il codice dello script:

void OnStart() {
//---
   double max_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MAX), _Digits);
   double min_price = NormalizeDouble(ChartGetDouble(0, CHART_PRICE_MIN), _Digits);
   
   double entry_price, stop_price, profit_price;
   entry_price = NormalizeDouble((max_price+min_price)/2, _Digits);
   stop_price = NormalizeDouble(entry_price-(entry_price-min_price)/2, _Digits);
   profit_price = NormalizeDouble(max_price-(max_price-entry_price)/2, _Digits);
   
   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
   
   Print("Entry: ", entry_price, ", Stop: ", stop_price, ", Profit: ", profit_price,
         ", Stop pips: ", stop_pips, ", Profit pips: ", profit_pips);
//---   
}

Ecco i risultati della corsa:

2013.03.29 16:42:03 Esperimento_Script (EURUSD,H4) Entrata: 1.29445, Stop: 1.28453, Profitto: 1.30438, Stop pips: 991, Profitto pips: 993
2013.03.29 16:41:57 Experiment_Script (GBPUSD,H4) Entrata: 1.50465, Stop: 1.49348, Profitto: 1.51583, Stop pips: 1117, Profitto pips: 1117

Dovrebbe essere 992 e 993 (per EURUSD), 1117 e 1118 (per GBPUSD). Puoi dirmi come ottenere un risultato corretto?

 
Rone:

...

Provate a dividere per 2,0 invece che solo per 2.

Il risultato di un'operazione intera è un intero, e non importa che il risultato sia scritto in doppio.

 
muallch: Perché non permettere (con un segno di spunta nelle impostazioni) al terminale di usare uno swap di cache? Ci sarà un compromesso velocità/carico di memoria selezionabile dall'utente.
Meglio andare direttamente al Service Desk con queste domande. Altrimenti si perderanno.
 
fyords: Provate a dividere per 2,0 invece che solo per 2.

No, non è questo il problema. Il divisibile è un doppio.

Il problema è molto probabilmente causato da queste linee:

   int stop_pips = int((entry_price - stop_price)/_Point);
   int profit_pips = int((profit_price - entry_price)/_Point);
Rone:
Prova a stampare il valore "(entry_price - stop_price)/_Point" senza arrotondare.
 

Per favore avvisate se qualcuno ha incontrato qualcosa di simile.

C'è un codice:

//+------------------------------------------------------------------+
double date[];
//+------------------------------------------------------------------+
void OnInit()
{
   ArrayResize(date,3);
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print("ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+
Funziona in tempo reale nel terminale:
DH      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
LN      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
DG      0       12:39:43        test (EURGBP.m,M5)      ArraySize(date)=3
Ma nel tester lo stesso codice dà un risultato diverso:
MN      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
OG      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
IM      0       12:34:21        test (EURGBP.m,M15)     2013.01.02 07:59:59   ArraySize(date)=0
Motivazione: