Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 353

 
_new-rena:

Questo (sotto) non funziona, ho digitato F_Path in explorer, ho cliccato invio, il file si apre... Le informazioni di WinApi hanno questo aspetto?

Chi impedisce l'uso del flag FILE_COMMON in scrittura e lettura? Il file sarà disponibile per tutti i terminali installati sul sistema. Sarà nella cartella condivisa di tutti i terminali.

In ME File --> Aprire la cartella dei dati condivisi

 
artmedia70:

Chi impedisce l'uso del flag FILE_COMMON in scrittura e lettura? Il file sarà disponibile per tutti i terminali installati sul sistema. Si troverà nella cartella condivisa di tutti i terminali.

In ME File --> Aprire la cartella dei dati condivisi

Grazie (!!!), lo proverò.
 

Ciao, qualcuno ha riscontrato questo problema quando si crea una richiesta di compravendita con dei parametri:

se metto i seguenti parametri:

mrequest.action=TRADE_ACTION_DEAL;
mrequest.type_filling=ORDER_FILLING_FOK;

mrequest.type=ORDER_TYPE_BUY;

il terminale annuncia che ho specificato un metodo non valido mrequest.type_filling(politica di esecuzione dell'ordine); se specifico mrequest.type_filling=ORDER_FILLING_RETURN, l'ordine viene aperto ma non posso chiuderlo programmaticamente perché il terminale segnala che viene utilizzato un metodo non valido. Sto eseguendo l'Expert Advisor su un server forex e tutto funziona bene su altri server. Qualcuno può scrivere una politica di esecuzione degli ordini che può essere utilizzata quando si sviluppano robot di trading per questo broker? Grazie.
 

C'è un indicatore mq4 con funzione Alert.

Per esempio:

//+------------------------------------------------------------------+
//|                                                    RSI-Alert.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
//#property indicator_minimum 0
//#property indicator_maximum 100
#property indicator_buffers 3
#property  indicator_color1 LightSeaGreen
#property  indicator_color2 CLR_NONE
#property  indicator_color3 CLR_NONE
#property  indicator_width1 1
#property  indicator_width2 1
#property  indicator_width3 1
#property  indicator_style1 STYLE_SOLID
#property  indicator_style2 STYLE_DOT
#property  indicator_style3 STYLE_DOT
//---- input parameters
extern int RSIPeriod=48;
extern int ApplyTo=0;
extern bool AlertMode=true;
extern int OverBought=0;
extern int OverSold=0;
//---- buffers
double RSIBuffer[];
double RSIOBBuffer[];
double RSIOSBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,RSIBuffer);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,RSIOBBuffer);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,RSIOSBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="RSI-Alert("+RSIPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
   SetIndexLabel(1,"OverBought");
   SetIndexLabel(2,"OverSold");
//----
   SetIndexDrawBegin(0,RSIPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int start()
  {
   int    i,counted_bars=IndicatorCounted();
//----
   if(Bars<=RSIPeriod) return(0);
//----
   i=Bars-RSIPeriod-1;
   if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1;
   while(i>=0)
   {
      RSIBuffer[i]=iForce(NULL,0,RSIPeriod,1,0,i);
      RSIOBBuffer[i]=OverBought;
      RSIOSBuffer[i]=OverSold;
      i--;
   }
   
   if(AlertMode)
   {
      if(RSIBuffer[1]<OverBought && RSIBuffer[0]>=OverBought)
         Alert("RSI = "+ RSIBuffer[i]+ ", Sell.");
      else if(RSIBuffer[1]>OverSold && RSIBuffer[0]<=OverSold)
         Alert("RSI = "+ RSIBuffer[i]+ ", Buy.");
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
Come fare in modo che nell'angolo in alto a sinistra della sottofinestra (dove di solito vengono visualizzati il nome e i parametri dell'indicatore), o in qualche altro modo, venga indicato se il segnale è attivo(extern bool AlertMode=true;) o disattivo?
 
Nilog:

C'è un indicatore mq4 con funzione Alert.

Per esempio:

Come fare o nell'angolo in alto a sinistra della sottofinestra (dove di solito vengono visualizzati il nome e i parametri dell'indicatore), o in qualche altro modo, per indicare se il segnale è abilitato(extern bool AlertMode=true;) o disabilitato?
Emettere testo per oggetti, per esempio.
 

La documentazione dice che:

При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.

Al momento questa affermazione non è rilevante - negli indicatori questa funzione è chiamata nel tester, almeno un indicatore può ricevere eventi generati da un altro indicatore nel tester.

Il problema è che una volta che l'indicatore riceve la chiamata di questa funzione, non ha accesso ai dati memorizzati nelle variabili dichiarate a livello globale, e viceversa - tutte le modifiche fatte in questa funzione non sono memorizzate nelle variabili di livello di accesso globale.

Esempi:

1. l'oggetto è dichiarato globalmente e inizializzato nella funzione OnInit. Si può accedere dalla funzione OnCalculate, ma otteniamo un messaggio di errore nella funzione OnChartEvent - puntatore non valido

2. c'è una funzione che emette il contenuto di una variabile nel giornale (la variabile è dichiarata globalmente). Quando si chiama questa funzione da OnCalculate si ottiene il valore atteso, quando si chiama la stessa funzione da OnChartEvent si ottiene un nonsenso.

 

Buona giornata!

Ho affrontato un problema quando uso gli eventi, in particolare la funzione OnChartEvent() in un indicatore. Quando lo si usa in un Expert Advisor, non ci sono problemi, ma nell'indicatore non funziona correttamente. Cioè l'evento si verifica ma non c'è modo di cambiare i campi esistenti. Esempio:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Come risultato otteniamo:

"OnCalculate(): k = 0" - sempre.

"OnChartEvent(): k = 0,...,123332" - conta da 0 a ...

Come può essere e perché? C'è un modo per risolvere il problema? Se qualcuno capisce, una risposta sarebbe molto apprezzata.

P.S.: Questa ingiustizia si verifica solo in strategy tester, in tempo reale tutto funziona correttamente.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
dariamap:

Buona giornata!

Ho affrontato un problema quando uso gli eventi, in particolare la funzione OnChartEvent() in un indicatore. Quando lo si usa in un Expert Advisor, non ci sono problemi, ma nell'indicatore non funziona correttamente. Cioè l'evento si verifica ma non c'è modo di cambiare i campi esistenti. Esempio:

//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEED);
}

int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total);

}

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;

}

}

//----------------------------------------------------------------------------------------------

Come risultato otteniamo:

"OnCalculate(): k = 0" - sempre.

"OnChartEvent(): k = 0,...,123332" - conta da 0 a ...

Come può essere e perché? C'è un modo per risolvere questo problema? Se qualcuno capisce, una risposta sarebbe molto apprezzata.

P.S.: Questa ingiustizia si verifica solo in strategy tester, in tempo reale tutto funziona correttamente.

Sera. A suo tempo, il Service Desk ha dato una risposta abbastanza precisa su questo argomento: il terminale e il tester delle strategie sono due programmi diversi, e le prestazioni degli Expert Advisors/indicatori nel tester e nel terminale possono essere diverse. Ciò che spesso funziona nel terminale client non funziona nello Strategy Tester. Scrivete al Service Desk, fornite le prove e lasciate che lo risolvano.
 
Tapochun:
Buona sera. A suo tempo, il Service Desk ha dato una risposta abbastanza precisa su questo argomento: il terminale e il tester di strategie sono due programmi diversi, e il lavoro degli Expert Advisors/indicatori nel tester e nel terminale può differire significativamente. Ciò che spesso funziona nel terminale client non funziona nello Strategy Tester. Per favore, scrivi al Service Desk e fornisci loro le prove e lascia che risolvano il problema.
Grazie mille! Sono contento che il problema non sia io)
 
extern string Symbol1= "EURUSD";
extern string Symbol2= "GBRUSD";

  double Sell1=iFractals(Symbol1,240,MODE_UPPER,2);
  double Sell2=iFractals(Symbol2,240,MODE_UPPER,2);
Puoi dirmi quale comando scrivere in modo che quando i frattali Sell1 e Sell2 sono aperti allo stesso tempo un ordine sia aperto
Motivazione: