Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 779

 
Alexey Volchanskiy:

.ex5 non serve a nessuno, se volete aiuto, pubblicate il codice sorgente.


Cazzo, pensavo fosse il codice sorgente :-) Sto anche guardando le altre icone .... Mi chiedevo quale fosse la fonte...... questa :-)

Si scopre che non è ....

File:
ChekParam.mq5  11 kb
 

Il punto è che l'impulso sulla meno terza barra dalla fine è zero e viene disegnato come zero. Ma non è zero nel buffer.

Non so cosa fosse, ma ho risolto il problema incollando tutto il codice PULSE in un nuovo indicatore, bypassando icustom.

Non ho avuto nessun errore alla seconda barra meno. Non ho cambiato nient'altro nel codice, quindi è davvero un bug nelle meta-citazioni.

 
LookingFor:

Il punto è che l'impulso sulla meno terza barra dalla fine è zero e viene disegnato come zero. Ma non è zero nel buffer.

Non so cosa fosse, ma ho risolto il problema incollando tutto il codice PULSE in un nuovo indicatore, bypassando icustom.

Non ho avuto nessun errore alla seconda barra meno. Non ho cambiato nient'altro nel codice, quindi è davvero un bug di metaquote.


senza il codice, il bug può essere solo tuo. purtroppo, chiedendo aiuto, TU non hai dato il materiale...

 
Qualcuno può aiutarmi? Qual è l'errore, perché l'indicatore non viene visualizzato correttamente?
File:
ChekParam.mq5  11 kb
 
Vladislav Andruschenko:

Purtroppo, quando hai chiesto aiuto, non hai dato il materiale...

Vladislav, in nome della giustizia, del desiderio di capire di cosa si tratta e per rispetto nei tuoi confronti, ti do il codice.


//+------------------------------------------------------------------+
//|                                                   PULS_SWING.mq5 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   1
//--- plot Pulse_Swing
#property  indicator_label1  "Pulse_Swing"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input double   points=0.005;
input double   begin_price_level=1.0;
//--- indicator buffers
double         Pulse_Swing [], pulse [] , trend [] , delta [];
int PULSE_Handle ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Pulse_Swing,INDICATOR_DATA);
   SetIndexBuffer(1,pulse,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,trend,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,delta,INDICATOR_CALCULATIONS);
   IndicatorSetInteger(INDICATOR_DIGITS,0);
   ResetLastError(); 
   PULSE_Handle = iCustom(NULL,0,"PULSE",
                          points,          // Points
                          begin_price_level          // begin_price_level
                          );
   Print("PULSE_Handle",PULSE_Handle,"  error = ",GetLastError()); 
//---
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);
   //ArrayFree (pulse);ArrayFree (delta);ArrayFree (Pulse_Swing);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   int  bar, start  ;
   if (prev_calculated==0)
   {pulse [0] = pulse [1] =0; start =begin+2 ;}
   else {start = prev_calculated ;}
   //Print(IntegerToString(bar));
   for (bar= start ;bar<rates_total;bar ++)
   {CopyBuffer(PULSE_Handle,0,bar,1,pulse);
   //Print(IntegerToString(pulse[bar]));
   if ((pulse [bar-1]- pulse [bar -2])>0) trend[bar-1] = 1 ; // 
   else
   if ((pulse [bar-1] - pulse [bar -2])<0) trend[bar-1] = -1 ; //
   else
   if (pulse [bar-1] == pulse [bar -2])  {trend[bar-1] = trend[bar-2] ;} // 
   else 
   continue ;
   delta[bar] = pulse[bar]- pulse[bar-1];
   if (trend [bar-1]== 1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] + delta[bar];
   else
   if (trend [bar-1]== -1 && pulse [bar] != pulse [bar-1])
   Pulse_Swing [bar] = Pulse_Swing [bar-1] - delta[bar];
   else
   if (delta [bar]==0 )Pulse_Swing [bar] = Pulse_Swing [bar-1] ;
   }
   //Print(IntegerToString(delta[rates_total-1]));
   Print(IntegerToString(delta[rates_total-2]));
   //Print(IntegerToString(pulse[rates_total-1]));
   Print(IntegerToString(pulse[rates_total-3]));
   Print(IntegerToString(pulse[rates_total-2]));
   Print(IntegerToString(pulse[rates_total-1]));
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 

Ho problemi a leggere il risultato dell'operazione di scambio. L'ho scritto così:

MqlTradeRequest request={0};
MqlTradeResult result={0};
//--- установка параметров операции
....
//--- отправка запроса
if ( !OrderSend(request,result) )
  PrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось
else // Я хочу получить парамеры резултата
{ Sleep(9999); // Жду получения резултата
  double ClosePrice=result.price;
}

Se si rimuove Sleep: ottengo sempre ClosePrice=0.0. Anche se aspetto 10 secondi (non voglio aspettare di più), ottengo quasi sempre il risultato, ma a volte no.

Come posso ottenere sempre un risultato?

La descrizione di OrderSend() dice :

Nota

Una richiesta di compravendita passa attraverso diverse fasi di convalida sul server di compravendita. Prima di tutto, tutti i campi richiesti del parametro di richiestasono controllati per la correttezza e, se non ci sono errori, il server accetta l'ordine per l'ulteriore elaborazione. Se l'ordine viene accettato con successo dal server di trading, la funzione OrderSend() restituisce true.

Cioè, quando ottengo true da OrderSend(), non ottengo il parametro MqlResult, se ho capito bene.

Quando verranno da me?

 
Ivan Ivanov:

Non posso leggere il risultato del mio scambio.

Forum sul trading, sistemi di trading automatico e test di strategia

L'errore 131 si verifica quando si modifica un ordine

fxsaber, 2017.09.12 19:47

Tutto quello che dovete fare è scrivere il nome del server di trading e il simbolo e il problema sarà risolto in poco tempo, perché tutti possono provarlo da soli.

Nel frattempo, si ha la sensazione che il compito non sia quello di trovare una soluzione, ma di rispondere sì/no.

 

Signori programmatori,

Ecco una domanda: se lo Strategy Tester in MT5 mostra buoni risultati solo a prezzi aperti, il robot aprirà trade solo a prezzi aperti con lo stesso risultato?

 
Dzyga:

Signori programmatori,

Domanda: se lo Strategy Tester in MT5 mostra buoni risultati solo a prezzi aperti, il robot aprirà trade solo a prezzi aperti con lo stesso risultato?


È facile da controllare: nell'EA si aprono operazioni solo al prezzo di apertura (cioè, alla nascita della barra) e nello Strategy Tester si controlla in modalità di generazione di tick "All ticks".

 

Colleghi, per favore aiutatemi

Non capisco cosa c'è di sbagliato nel ciclo, i dati dell'Handle non vanno nell'array psa1

if (prev_calculated == 0 ){i=bars =start=1;}
  else {start = prev_calculated ;}
  for ( bars=start ; bars<rates_total ; bars ++)
  {CopyBuffer(pulse_Handle,0,start,1,pca1);
  
  if (pca1[bars]!=pca1[bars-1]) {pca2[i]=pca1[bars]; i++;
  string s="";s=IntegerToString(pca1[bars])+"  ";Print(s); continue;}
  else continue ;}