[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 59

 
xrust писал(а) >>
Potete cambiare il nome del rapporto dettagliato in rapporto normale e sarete felici

Puoi dirmi, se non è difficile, dove esattamente questo nome può essere cambiato? L'aiuto dell'utente non dice assolutamente nulla al riguardo.

 
Uh... mi stai sconcertando .... Non hai mai rinominato un file?
 
Cari esperti, per favore non ignorate la mia domanda.

C'è un indicatore che conta la volatilità, per esempio quotidianamente. Ma non quello che dà un numero indefinito come 0,34. Ma dovrebbe calcolare il numero di candele al giorno e dividerlo per un determinato periodo (numero di giorni) in modo che l'indicatore conosca il valore medio. Esempio: apertura 100, chiusura 200; il secondo giorno - apertura 200, chiusura 250. Volatilità media per questi 2 giorni = ((200-100)+(250-200))/2 giorni=(100+50)/2=75
Dove scaricare se disponibile.
 
xrust писал(а) >>
Uh... mi stai confondendo qui.... >> non avete mai rinominato un file?

Il terminale dovrebbe generare automaticamente un rapporto ogni 20 minuti e caricarlo sul server ftp. Questa funzione salva un rapporto regolare per impostazione predefinita. Questa funzione del terminale di default salva un rapporto regolare, mentre io vorrei un rapporto dettagliato con informazioni aggiuntive e un grafico. Potete salvare manualmente il rapporto dettagliato senza problemi e selezionare il periodo di storia che desiderate.

E prima mi hai lasciato perplesso - cosa e dove dovrei rinominare manualmente per organizzare la funzione automatica? Non è affatto chiaro.

 

Ripetendo un post di https://forum.mql4.com/ru/10422, forse la mia stessa domanda sarebbe più appropriata qui.


Ecco una parte del codice, che da example.ini:

[common]
numCross=3

[cross1]
name=EURUSD

[cross2]
name=GBPUSD

[cross3]
name=USDJPY


legge il numero di coppie e poi salva i nomi delle coppie nell'array di stringhe uno per uno:

#include <IniFiles.mqh>

extern string config_path = "C:\Program Files\MetaTrader - MetaQuotes\experts\example.ini";

string CrossName[];
int numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
string sectionName = "common";

numCross = ReadIniInteger(config_path, sectionName, "numCross", 0);
ArrayResize(CrossName, numCross);

for (int i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = ReadIniString(config_path, sectionName, "name", "-");
Print("init.1: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.1: read complete");

for (i=0; i<numCross; i++)
{
Print("init.2: CrossName[", (i+1), "]=", CrossName[i]);
}


Print("-------------------------------");
for (i=0; i<numCross; i++)
{
sectionName = StringConcatenate("cross", i+1);
CrossName[i] = StringSubstr(ReadIniString(config_path, sectionName, "name", "-"), 0, 0);
Print("init.3: CrossName[", (i+1), "]=", CrossName[i]);
}
Print("init.3: read complete");

for (i=0; i<numCross; i++)
{
Print("init.4: CrossName[", (i+1), "]=", CrossName[i]);
}

return(0);
}


Sembra essere semplice e dopo aver letto l'ini dovremmo ottenere un array di nomi di coppie.

Ma come risultato, dopo aver letto un altro parametro da ini e aver assegnato un valore a un altro elemento dell'array,

tutti gli altri elementi assegnati in precedenza ottengono lo stesso valore.

2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.4: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.3: CrossName[1]=EURUSD
2009.04.09 02:17:06 example GBPUSD,H4: -------------------------------
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[2]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.2: CrossName[1]=USDJPY

2009.04.09 02:17:06 example GBPUSD,H4: init.1: read complete
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[3]=USDJPY
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[2]=GBPUSD
2009.04.09 02:17:06 example GBPUSD,H4: init.1: CrossName[1]=EURUSD

Si scopre che quando si assegna un array di stringhe a una variabile, è in realtà l'assegnazione di

riferimento, non valore. Ho cercato in tutta la documentazione disponibile più il forum ma non ho trovato nessuna risposta sul perché sia così.

Ho trovato la via d'uscita usando StringSubstr, ma qualcosa mi dice che non è del tutto corretto.


Domanda a chi lo sa: come assegnare correttamente i valori di altre variabili agli elementi dell'array di stringhe ?

 
Yug >> :

Ripetendo un post di https://forum.mql4.com/ru/10422, forse la mia stessa domanda sarebbe più appropriata qui.


Mi sono ricordato! Peculiarità dell'implementazione delle stringhe. Dopo che l'array è stato ridimensionato, dovrebbe essere passato e azzerato:

ArrayResize( CrossName, numCross);

for (int i=0; i< numCross; i++)
{
   CrossName[ i] = "";
}
Potrei sbagliarmi, ma dovrebbe aiutare.
 
XinoXano писал(а) >>

Il terminale dovrebbe generare automaticamente un rapporto ogni 20 minuti e caricarlo sul server ftp. Questa funzione salva un rapporto regolare per impostazione predefinita. Questa funzione del terminale salva di default un rapporto regolare, mentre io vorrei un rapporto dettagliato con informazioni aggiuntive e un grafico. Potete salvare manualmente il rapporto dettagliato senza problemi e selezionare il periodo di storia che desiderate.

E tu mi hai prima confuso - cosa e dove dovrei rinominare manualmente, per organizzare il lavoro della funzione automatica? Non è affatto chiaro.

I modelli di rapporto statement.htm, e il rapporto dettagliato StatementDetailed.htm si trovano nella cartella terminal\templates\. Per impostazione predefinita, il terminale invia un semplice rapporto statement.htm, hai bisogno di StatementDetailed.htm, ti ho suggerito in russo di rinominare il file StatementDetailed.htm in ambiente windows in statement.htm. O scrivere anche le istruzioni per rinominare?

 

Cari esperti,

per favore aiutatemi con le transazioni LOKing

Più dettagli e codice qui: Aiutami a gestire il LOKing delle posizioni".

Sempre con rispetto,

 
xrust писал(а) >>

I modelli di rapporto statement.htm e il rapporto dettagliato StatementDetailed.htm si trovano nella cartella terminal\templates\. Per impostazione predefinita, il terminale invia un regolare rapporto statement.htm, ma hai bisogno di un statementDetailed.htm dettagliato, ti ho suggerito in russo di rinominare in windows il file StatementDetailed.htm in statement.htm. O scrivere anche le istruzioni per rinominare?

No rinominare me stesso sarò in grado, ma per sostituire un modello ad un altro, non mi è venuto in mente ...

Grazie mille! Ora tutto è chiaro e tutto funziona!!!!

 
Everlost >> :

Molto semplice - quando arriva il segnale Cls_S o Cls_B, dimentichiamo la posizione aperta per ultima (resettiamo il valore della variabile Last_Position a -1).

if ((Cls_S==true || Cls_B==true) && Last_Position>=0) Last_Position=-1;

Lo vedo in teoria, ma ora l'Expert Advisor ha completamente smesso di fare trade (

Io ce l'ho così:

//Учет ордеров истории
int ORDtime=0;
double ORDprofit=0.01;
int ORDtype=-1;
for (int j=OrdersHistoryTotal()-1; j>=0; j--) 
{
  if (OrderSelect( j, SELECT_BY_POS, MODE_HISTORY)) 
  {
    if (OrderSymbol()==Symbol()) 
    {
      if (OrderCloseTime()!=0 && OrderCloseTime()> ORDtime) 
      {
        ORDtime=OrderCloseTime();
        ORDtype=OrderType();
        ORDprofit=OrderProfit();
      }
    }
  }
}
...
//Торговые критерии на открытие и экстренное закрытие ордеров
if (( ORDtype==-1)&&(...))
   {
    Opn_B=true;
   }
if (( ORDtype==-1)&&(...))    
   {
    Cls_B=true;
   }
if (...)
   {
    Opn_S=true;
   }
if (...)    
   {
   Cls_S=true;
   }
// Дополнительные условия к открытию
if (( Cls_B==true|| Cls_S==true)&&( ORDtype>=0)) ORDtype=-1;       //ДОПИСАТЬ УСЛОВИЕ ИСТОРИЧЕСКИХ ОРДЕРОВ


c'è un errore?