Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 189

 
In che modo Metatrader 5 è diverso dal precedente 4 è più difficile da lavorare o no. Ogni broker offre questi programmi, perché non c'è un programma per tutti i broker in modo da non doverne installare molti.
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik:
In che modo Metatrader 5 è diverso dal precedente 4 è più difficile da lavorare o no. Ogni broker offre questi programmi, perché non c'è un programma per tutti i broker in modo da non doverne installare molti.
Scaricate entrambi i terminali, lavorate con loro su conti demo e scopritelo voi stessi.
 

Sto cercando di fare una funzione che restituisca il risultato dell'ultima posizione chiusa (più o meno). Questa funzione è progettata per un Expert Advisor multicurrency e dovrebbe selezionare l'ultima posizione chiusa tra tutte le coppie di valute, e sto avendo alcuni problemi con essa. Puoi correggere la funzione?

double last_profit()
{  
int dir = 0;
double prof = 0;
ulong d_ticket;

if (HistorySelect(0,TimeCurrent())) 
    {
       int j=HistoryDealsTotal()-1;
       if(j>0)
      {
         d_ticket = HistoryDealGetTicket(j);
         if (d_ticket>0)
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if(prof < 0)dir = -1;
if(prof > 0)dir = 1;
if(prof == 0)dir =0;

return(dir);
} 

 
Automated-Trading:

OBJ_ALL_PERIODS=2097151

Grazie, ma non ha funzionato niente. Il problema è che i calcoli del periodo D1 e...... dovrebbero essere visualizzati su tutti i timeframe, ma non esce così com'è. Cosa fare?
File:
macd2.mq5  4 kb
 
Reshetov:

Cosa intendi con: metodi inutilizzati nelle tue classi? Questa non è la pratica in OOP. Un normale programmatore OOP, in contrasto con la programmazione algoritmica, crea classi con tutti i campi e i metodi necessari, come si dice, per tutte le occasioni, perché la stessa classe può essere utilizzata in seguito in altre applicazioni o diventare parte della libreria di classi. Per non parlare del fatto che anche all'interno di un progetto è meglio creare classi complete, non spogliate, in modo da non dover cercare nel codice sorgente e aggiungere successivamente i campi e i metodi necessari.

In OOP qualsiasi economia, a cui molte persone si abituano nella programmazione algoritmica, può rivelarsi dannosa in seguito. Tutto ciò che non viene utilizzato deve essere escluso dal codice dal compilatore e non dal programmatore.

Naturalmente, OOP si traduce in un codice sorgente più grande rispetto alla programmazione algoritmica. Ma questo non è uno svantaggio ma un vantaggio perché molto del codice "inutile" in un dato progetto può essere riutilizzato in altri progetti.

Non c'è bisogno di cercare di fare un enigma, cioè tutto in una classe. Dovete creare librerie di classi, cioè rompere la funzionalità in classi separate e non dimenticate di aggiungere commenti a questo feudo, e poi tutto sarà in ordine. Inizialmente, quando ho iniziato a imparare Java dopo Pascal, anch'io ho cercato di fare tutto in un unico pezzo, cioè invece di usare OOP, ho creato una classe con tutto ciò di cui avevo bisogno per un certo compito, proprio come nella programmazione algoritmica. Il risultato era un pasticcio non universale che era impossibile da applicare ovunque in seguito, per non parlare della difficoltà di capire tale codice.

Capisco tutto questo molto bene. Ma possiamo almeno mostrarvi le variabili private che non saranno utilizzate come si fa in VisualStudio?

Il punto è che le classi sono progettate durante il processo di sviluppo. Non si può semplicemente tenere conto di tutto ciò che c'era prima della creazione. Ecco perché vengono create classi di frame con il minor numero possibile di funzionalità. Mentre si interagisce con queste classi del framework, l'architettura generale comincia ad essere elaborata. Alcuni metodi vengono semplicemente cancellati, altri vengono spostati nella sezione privata e altri ancora vengono migrati da una classe all'altra. Nel processo, appaiono inevitabilmente variabili, metodi e persino intere classi dimenticate. Questo è normale perché è qualcosa di simile al principio di Okama in azione - prima scriviamo codice cattivo e ridondante. Poi formalizziamo il compito in modo più chiaro e alcune entità semplicemente scompaiono. La ridondanza non porta a nulla. Ed è in questo processo che l'aiuto del compilatore sarebbe molto utile - vedere le variabili inutilizzate e almeno i metodi privati sarebbe molto utile.

 

Salve.

Ho capito che la funzioneOnCalculate() che è usata negli indicatori si genera da sola, cioè senza l'evento di cambiamento del prezzo ,

Quale funzione può essere applicata nell'indicatore che genera solo quando si verifica un evento di cambiamento di prezzo? Grazie

 
Vikon:

Salve.

Ho capito che la funzioneOnCalculate() che viene utilizzata negli indicatori si genera da sola, cioè senza l'evento di cambiamento del prezzo ,

Quale funzione può essere applicata nell'indicatore che genera solo quando si verifica un evento di cambiamento di prezzo? Grazie

L'eventoCalculate viene generato per gli indicatori immediatamente dopo l'evento Init e ad ogni cambiamento dei dati di prezzo. È gestito dalla funzioneOnCalculate. Quando la storia viene cambiata (quando la storia è impaginata) questo evento genera ancheOnCalculate.

OnCalculate è la funzione più importante per l'indicatore, in cui vengono eseguiti tutti i calcoli dell'indicatore in caso di cambiamenti dei dati di prezzo.

 
barabashkakvn:

L'eventoCalculate viene generato solo per gli indicatori immediatamente dopo l'invio dell'evento Init e su qualsiasi cambiamento nei dati di prezzo. Questo evento è gestito dalla funzioneOnCalculate. Lo stessoOnCalculate viene generato quando la storia viene cambiata (quando la storia è paginata).

OnCalculate è la funzione più importante per l'indicatore, in cui vengono eseguiti tutti i calcoli dell'indicatore in caso di cambiamenti dei dati di prezzo.

Qui ha un po' di looping, cioè genera sempre e quando il periodo cambia, le letture cambiano. Qual è l'errore?

#property copyright "Copyright 2014, MetaQuotes Software Corp.
#proprietà link "http://www.mql5.com"
#proprietà versione "1.00"
#proprietà indicator_chart_window
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzata

int EMA1=12;
int EMA2=26;
int SMA=9;

ENUM_TIMEFRAMES periodo_macd;
datetime t_MACD[];
doppio MACD[];
bool high_low=false;
int shift_nachalo;
doppio w_MACD[]; d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0;
int barUP=0;

//+------------------------------------------------------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE);
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE);
ArraySetAsSeries(MACD,true);
ArraySetAsSeries(t_MACD,true);
ArraySetAsSeries(w_MACD,true);
ArraySetAsSeries(d_MACD,true);
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| funzione di iterazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
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[])
{

ObjectsDeleteAll(0,0,-1);
////////////////////////////////////////////////////////
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD);
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY);
nachalo();
ObjectCreate(0, "lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0);
ObjectSetInteger(0, "lin_2",OBJPROP_BACK,true);
ObjectSetInteger(0, "lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0, "lin_2",OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0, "lin_2",OBJPROP_STYLE,1);
return(rates_total);
}
//+------------------------------------------------------------------+
//////////////////////////////////////////////////////////////////////////////
void nachalo() //inizio di una nuova onda
{
doppio low_nachalo[],high_nachalo[];
CopyTime(NULL,period_macd,0,1000,t_MACD);
se (MACD[1]>0)
{high_low=false;
mentre (MACD[barDown]>0)
{barDown++;}
barUP=barDown;
mentre (MACD[barUP]<0)
{barUP++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo);
ArraySetAsSeries(low_nachalo,true);
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
se (MACD[1]<0)
{high_low=true;
mentre (MACD[barUP]<0)
{barUP++;}
barDown = barUP;
mentre (MACD[barDown]>0)
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(high_nachalo,true);

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1));
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
File:
macd2.mq5  4 kb
 
Vikon:

È qui che avviene il loop, cioè genera costantemente e quando il periodo cambia, le letture cambiano. Qual è l'errore?


Come inserire correttamente il codice nel forum.

 
Vikon:


Notate l'errore:

Nessun buffer indicatore legato

Utilizzare:

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer()
Leggete anche l'articolo"Come scrivere un indicatore in MQL5".