Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1466

 
WindUP:
Grazie, ma potremmo avere almeno un esempio oggettivo? Una vista dall'alto, per così dire. Sono un completo novizio e sono stato sull'argomento per due giorni :-)

qui c'è probabilmente qualcosa di simile

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

Anch'io sto cercando di imparare - penso che sto arrivando da qualche parte.

Ciao. Scusa, vedo nello screenshot che ci sei riuscito, ma non ho visto dove si trova in questo codice la funzione di copia dei dati della candela precedente [1] ?




Potete per favore dirmi corsi di programmazione MQL5 for dummies, dal semplice al complesso, dove e con cosa è meglio iniziare, per ottenere più risultati e meno tempo da perdere? Te ne sarei grato :-)

 
WindUP:

Ciao. Scusa, vedo nello screenshot che sei riuscito, ma qui non ho visto dove in questo codice è la funzione di copiare i dati della candela precedente [1] ?




Come posso dirvi corsi di programmazione MQL5 for dummies, dal semplice al complesso, dove e con cosa è meglio iniziare, per ottenere più risultati e meno tempo da perdere? Te ne sarei grato :-)

Immaginate che un amico vi avvicini e vi chieda di "insegnarvi a lavorare in Internet". È difficile immaginare cosa insegnare? È altrettanto difficile insegnare la programmazione. C'è un compito - c'è una soluzione. Ma proprio così... si può imparare qualsiasi lingua, le basi sono le stesse per tutte. Programmare non è tanto scrivere codice quanto impostare un problema, scrivere un algoritmo per la sua soluzione e solo dopo scrivere codice. E la fase finale, il debug e il controllo del risultato.

Nel codice di SanAlrx, non capisco perché dobbiamo fare un tale stock di dati copiati se abbiamo un compito specifico per ottenere OHLC solo per la prima candela.

int copied=CopyRates(Symbol(),0,0,10,rates);

e perché copiare i valori della candela corrente, appena aperta. Ma... questa è la sua decisione e i suoi scarafaggi.

 
WindUP:

Ciao. Scusa, vedo nello screenshot che sei riuscito, ma qui non ho visto dove in questo codice è la funzione di copiare i dati della candela precedente [1] ?




Potete per favore dirmi corsi di programmazione MQL5 for dummies, dal semplice al complesso, dove e come meglio iniziare, per ottenere più risultati e meno tempo da perdere? Te ne sarei grato :-)

Io stesso sono uno studente - per esempio, guardo la documentazionehttps://www.mql5.com/ru/docs/series/copyrates, c'è un esempio di script, lo salvo sul mio PC e comincio a leggerlo e a lavorare sui dettagli per istinto.

e questa funzione - per intuito - è quella che ho trovato.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

È per COMPRARE "SL".

Per vendere dovrebbe essere così

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ho appena messo un numero qui - sarebbe possibile comprare fino a 10 barre. Ma non ne hai bisogno - ne hai bisogno di 1 (uno).

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Ciao. Scusa, vedo nello screenshot che ci sei riuscito, ma non ho visto dove in questo codice c'è una funzione per copiare i dati della candela precedente [1] ?




Potete per favore dirmi corsi di programmazione MQL5 for dummies, dal semplice al complesso, dove e come meglio iniziare, per ottenere più risultati e meno tempo da perdere? Te ne sarei grato :-)

Ecco un buon esempio - sono appena andato alla pagina ed ecco uno script migliore per dirvi come funziona.https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Способы привязки объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
SanAlex:

Io stesso sto imparando - per esempio, sono andato alla documentazionehttps://www.mql5.com/ru/docs/series/copyrates , c'è uno script di esempio, lo salvo sul mio computer e comincio a leggerlo ed esplorarlo a tentoni.

e questa funzione - per intuito - è quella che ho trovato.

È per COMPRARE "SL".

Per vendere dovrebbe essere così

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ho appena messo un numero qui - sarebbe possibile comprare fino a 10 barre. Ma non ne avete bisogno - avete bisogno di 1 (uno).

Questo apre e imposta lo SL per BUY e SELL

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Foto di

 

Salve.

Potresti darmi un suggerimento, sono in difficoltà.

Prescrivo l'indicatore attraverso iCustom e mi trovo di fronte a un problema - l'indicatore ha un menu di testo con una scelta, si apre e ci sono diverse voci prescritte, beh, penso sia chiaro)

Come posso aggiungerlo nel menu?

extern int HIT = 0; non funziona, smette di visualizzare, non lasciando nessun parametro visualizzato.

Forse attraverso ENUM , ci cosa scegliere, o forse qualcos'altro?

Grazie in anticipo.

File:
 
Сергей:

Salve.

Potresti darmi un suggerimento, sono in difficoltà.

Prescrivo l'indicatore attraverso iCustom e mi trovo di fronte a un problema - l'indicatore ha un menu di testo con una scelta, si apre e ci sono diverse voci prescritte, beh, penso sia chiaro)

Come posso aggiungerlo nel menu?

extern int HIT = 0; non funziona, smette di visualizzare, non lasciando nessun parametro visualizzato.

Forse attraverso ENUM , ci cosa scegliere, o forse qualcos'altro?

Grazie in anticipo.

Mettere una stringa vuota "" o uno spazio " "

 

Quindi volevo prescriverlo in qualche modo per poter cambiare le impostazioni.

Ho un articolo diverso per ogni coppia e come lo seleziono?

E senza quel menu non è rilevante, e lo screenshot è solo un esempio di uno simile.

 
Сергей:

Quindi volevo prescriverlo in qualche modo per poter cambiare le impostazioni.

Ho un articolo diverso per ogni coppia e come lo seleziono?

E senza quel menu non è rilevante, e lo screenshot è solo un esempio di uno simile.

Scusate la disattenzione. L'indicatore ha un'enumerazione. E nell'Expert Advisor, devi specificare il nome di questa enumerazione come tipo di variabile nei parametri di input.

Anche se non ho provato... e forse dovremo ripetere questa enumerazione nell'EA, o semplicemente impostare il tipo di variabile ENUM_BASE_CORNER