Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 147

 

EA dovrebbe leggere da un file un array di dati nella forma: data integer1 integer2 integer3 integer4, può essere da qualsiasi tipo di file, tranne bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

viene cancellato da questa cartella.

Ecco il codice.


int File()
{
int P=0;

int filehandle=FileOpen("qqq.csv",FILE_READ|FILE_CSV,","); 
if(filehandle!=INVALID_HANDLE) 
     { 
     datetime d = FileReadDatetime(filehandle);
   int I=FileReadNumber(filehandle);
     FileClose(filehandle);
     Comment(d+" "+I);
     }
     else {Comment("qqq.csv");}
return P;

}

potete specificare il percorso della cartella da cui il file non sarà cancellato dal tester? Ho capito che tutti i file vengono cancellati da questa cartella durante i test, ma quando il file viene creato programmaticamente, viene messo in questa cartella

 
Mikhail Simakov:

EA dovrebbe leggere da un file un array di dati nella forma: data integer1 integer2 integer3 integer4, può essere da qualsiasi tipo di file, tranne bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

viene cancellato da questa cartella.

Ecco il codice.

Forse specificare il percorso della cartella da cui il file non sarà cancellato dal tester? Ho capito che tutti i file vengono cancellati da questa cartella durante i test, ma quando si crea un file programmaticamente, viene messo in questa cartella

Forse dovremmo usare FileCopy con il flag FILE_COMMON. Il nuovo test funziona da zero, questo potrebbe essere un problema tecnico.

 
Konstantin Nikitin:

Forse dovresti usare FileCopy con il flag FILE_COMMON. Il nuovo test funziona da zero, questo potrebbe essere un problema tecnico.

funziona se si copia il file in una cartella durante il test )) ora per capire il delimitatore

 

Ho iniziato a scrivere un pannello di trading in MQL4 ed ecco il paradosso. Tutto sembra a posto, ma ogni volta che cambio TF, linee e testo di altri indicatori vengono disegnati sopra il mio pannello.

Ecco cosa ho controllato: quando si cambia il TF, il parametro OBJPROP_BACK = false. Significa che tutto va bene da questa parte.

Qualche idea su questo argomento?

P.S. In effetti, ho controllato ora e il codice sorgente (che ho preso come prototipo) si comporta allo stesso modo. Dopo aver cambiato TF, disegna le linee normali sopra il pannello e le linee create dagli indicatori che non usano OOP.
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7:

Ho iniziato a scrivere un pannello di trading in MQL4 ed ecco il paradosso. Tutto sembra ok, ma ogni volta che cambio TF, linee e testo di altri indicatori sono disegnati sopra il mio pannello.

Ecco cosa ho controllato: quando si cambia il TF, il parametro OBJPROP_BACK = false. Quindi tutto è a posto da questo lato.

Qualche idea su questo argomento?

P.S. In effetti, l'ho controllato ora, il codice sorgente (che ho preso come prototipo) si comporta allo stesso modo. Dopo aver cambiato TF, disegna le linee normali sopra il pannello e le linee create dagli indicatori che non usano OOP.
https://www.mql5.com/ru/code/19220

Quando si cambia l'orizzonte temporale, gli oggetti creati da altri programmi vengono cancellati e quelli nuovi vengono creati subito. Nel pannello, gli oggetti non vengono cancellati, quindi sono "vecchi". Sul grafico, si applica il principio "chi è ultimo sta in cima".

È necessario cancellare gli oggetti nel pannello con DeInit(), e crearne di nuovi

 
Goya7:

Ho iniziato a scrivere un pannello di trading in MQL4 ed ecco il paradosso. Tutto sembra ok, ma ogni volta che cambio TF, linee e testo di altri indicatori sono disegnati sopra il mio pannello.

Ecco cosa ho controllato: quando il TF è cambiato, il parametro OBJPROP_BACK = false. Quindi, tutto è a posto da questo lato.

Qualche idea su questo argomento?

P.S. In effetti, l'ho controllato ora, il codice sorgente (che ho preso come prototipo) si comporta allo stesso modo. Dopo aver cambiato TF, disegna le linee normali sopra il pannello e le linee create dagli indicatori che non usano OOP.
https://www.mql5.com/ru/code/19220
Vitaly Muzichenko:

Quando si cambia l'orizzonte temporale, gli oggetti creati da altri programmi vengono cancellati e quelli nuovi vengono creati subito. Nel pannello, gli oggetti non vengono cancellati, quindi sono "vecchi". Sul grafico si applica il principio "chi è ultimo sta in cima".

È necessario cancellare gli oggetti nel pannello usando DeInit(), e crearne di nuovi

è meglio catturare la creazione di un nuovo oggetto in Events e ridisegnare il pannello

 
Vitaly Muzichenko:

Quando si cambia tempo, gli oggetti creati da altri programmi vengono cancellati e quelli nuovi vengono creati immediatamente. Nel pannello, gli oggetti non vengono cancellati, quindi sono "vecchi". Nel grafico si applica il principio "L'ultimo in cima è l'ultimo in cima".

È necessario cancellare gli oggetti nel pannello usando DeInit(), e crearne di nuovi

Grazie per i pensieri. In DeInit() vengono cancellati, ovviamente. Quando si cambia TF la procedura Init() passa, ma qualcosa mi dice che il pannello non viene ridisegnato. Cioè, ho fatto un esperimento e ho installato un altro pannello, che è territorialmente dove si trova il mio e poi l'ho cancellato. Anche il mio è sparito (prima del cambiamento di TF) - quindi non sta ridisegnando. ((
Puoi dirmi un po' di più su come ridisegnarlo?


Taras Slobodyanik:

è meglio catturare la creazione di un nuovo oggetto in Events e ridisegnare il pannello

Ditemi come fare, sono solo mezz'ora come programmatore. :)
 
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);
}


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//событие создания нового объекта на чарте
if(id==CHARTEVENT_OBJECT_CREATE && StringFind(sparam, prefix, 0)<0)
   {
   //удаляем панель и рисуем заново

   ChartRedraw();
   }
}

ps. che mi ricorda - devi anche controllare il nome dell'oggetto creato per assicurarti che non sia il "tuo" oggetto (prefisso al nome dei tuoi oggetti).
o al posto del nome, confrontare il tipo di oggetto.

 
Cittadini, ditemi se lo sto facendo bene!!! Ho bisogno che l'Expert Advisor faccia trading quando non è entrato nella zona 30 o 70, e quando è entrato, non fa trading!!! È il modo giusto per farlo?

RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 > 70 && 70> RSI4;
if(RSItf == true)
{
}
else
{
ordersend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka:
Cittadini, ditemi se lo sto facendo bene!!! Ho bisogno che l'Expert Advisor faccia trading quando non è entrato nella zona 30 o 70, e quando è entrato, non fa trading!!! È il modo giusto per farlo?

È qualcosa del genere, per quanto ho capito avete bisogno di

int RSIPeriod = 0, Slippage = 5, Magic = 1234;
double lot = 0.1;

void OnStart()
{
     double RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1),
            RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);
     int ticket = 0;
     
     if(RSI3 <= 30 && RSI4 <= 30)
          ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
     
     if(RSI3 >= 70 && RSI4 >= 70)
          ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
Motivazione: