Creare un robot - pagina 5

 

Aggiunti altri due pulsanti - per impostare le linee orizzontali.

-------------------------------------------------


File:
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Aggiunti comandi per linee orizzontali o di tendenza

//+------------------------------------------------------------------+
//|                                                         0005.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#define    InpMagic  182979245
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position; // trade position object
CTrade         m_trade;    // trading object
CSymbolInfo    m_symbol;   // symbol info object
//+------------------------------------------------------------------+
//| ENUM_TRADE_COMMAND                                               |
//+------------------------------------------------------------------+
enum ENUM_TRADE_COMMAND
  {
   Turn_Off=0,       // TURN  OFF
   UpName=1,         // Line UpName
   DownName=2,       // Line DownName
   UpName_s=3,       // Line UpName + Open Sell
   UpName_b=4,       // Line UpName + Open Buy
   DownName_b=5,     // Line DownName + Open Buy
   DownName_s=6,     // Line DownName + Open Sell
   close_buys=7,     // Close All Buy's
   close_sells=8,    // Close All Sell's
   close_all=9,      // Close All Buy's and Sell's
   open_buy=10,      // Open  Buy
   open_sell=11,     // Open  Sell
   close_open_b=12,  // Close Sell + Open Buy
   close_open_s=13,  // Close Buy + Open Sell
   open_buy_sell=14, // Open  Buy and Sell
  };
//+------------------------------------------------------------------+
input string   t="----- Lots                -----";              //
input double   InpLots                      = 0.01;              // Lots
input string   t0="---- Line Name           -----";              //
input string   InpObjUpName                 = "Имя Линии Up";    // Obj: Up (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommand    = UpName_s;          // Obj:  command: UP
input string   InpObjDownName               = "Имя Линии Down";  // Obj: Down (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InTradeCommand     = DownName_b;        // Obj:  command: DOWN
input ushort   InpObjStep                   = 15;                // Obj: Step (distance from price to object, in pips)
input string   t1="---- Indicators: UP      -----";              //
input bool     InpIndicatorsUp              = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY1  = open_buy;          // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU1  = open_sell;         // Trade command: ( Sell )
input string   t2="---- Indicators:         -----";              //
input bool     InpIndicators                = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY   = close_sells;       // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU   = close_buys;        // Trade command: ( Sell )
//---
double   m_adjusted_point;                // point value adjusted for 3 or 5 points
int      handle_iCustomUp;                // variable for storing the handle of the iStochastic indicator
int      handle_iCustom;                  // variable for storing the handle of the iStochastic indicator
datetime ExtPrevBarsUp           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBars             = 0;     // "0" -> D'1970.01.01 00:00';
double   m_obj_step              = 0.0;   // Obj: Trailing Stop   -> double
uint     SLEEPTIME               = 1;     // Время паузы между повторами в секундах
ushort   InpSignalsFrequency     = 1;     // Search signals, in seconds (min value "1")
datetime ExtLastSignalsRx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsRx           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtLastSignalsSx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsSx           = 0;     // "0" -> D'1970.01.01 00:00';
bool     ExtTurnOff              = false; //
bool     ExtUpName               = false; //
bool     ExtDownName             = false; //
bool     ExtNeedCloseBuy         = false; //
bool     ExtNeedCloseSell        = false; //
bool     ExtNeedCloseAll         = false; //
bool     ExtNeedOpenBuy          = false; //
bool     ExtNeedOpenSell         = false; //
bool     ExtNeedOpenBuySell      = false; //
//+------------------------------------------------------------------+
File:
0005.mq5  101 kb
 
SanAlex:

Aggiunti comandi per linee orizzontali o di tendenza

Buona giornata e buon umore a tutti!

Che cosa ha chiesto Roman? Ecco una citazione dal suo primo post: "Programma completo, per aprire uno scambio quando inizia e per favore spiegare cosa è cosa. Aiuta molto".

Aggiungere semplicemente dei codici senza spiegare a cosa servono è inutile!

Roman, la tua soluzione a questa situazione è esattamente la stessa della mia. Prendete qualsiasi semplice Expert Advisor da CodeBase, beh, almeno questo https://www.mql5.com/ru/code/138

Aprite il suo codice in MetaEditor e cominciate a studiare i commenti che si trovano in ogni linea del codice. Ci sono EA in cui tutti i commenti sono scritti in inglese. Se non conosci bene la lingua, Google Translator ti aiuterà. Se in qualsiasi Expert Advisor manca il commento alle linee, allora cercate in sequenza tutte le parole colorate nel codice del programma, mettete il cursore su di esse, premete il tasto F1 e le sezioni appropriate del manuale MQL5 si apriranno per voi. Leggi queste sezioni, commenta queste righe con parole tue, e se qualcosa non è chiaro, fai domande qui. In questo modo, vi muoverete più velocemente nell'apprendimento del linguaggio di programmazione.

Saluti, Vladimir.

Советник "Метод Пуриа"
Советник "Метод Пуриа"
  • www.mql5.com
Предлагается использовать следующие валютные пары в торговой стратегии форекс "Метод Пуриа" : AUDJPY - M30 - 15 пунктов (т.е. закрываем сделку при 15 пипсов тейк-профита) NZDUSD - 1H - 25 пунктов USDCAD - H1 - 20 пунктов EURGBP - H1 - 10 пунктов USDJPY - M30 - 15 пунктов GBPUSD - М30 - 20 пунктов USDCHF - M30 - 10 пунктов EURCHF - H1 - 15...
 
MrBrooklin:

Buona giornata e buon umore a tutti!

Cosa ha chiesto Roman? Ecco una citazione dal suo primo post: "Completamente programma, sull'apertura di un commercio quando inizia e per favore spiegare che cosa è cosa. Aiuta molto".

Aggiungere semplicemente dei codici senza spiegazioni è inutile per lui!

Roman, la tua soluzione in questa situazione è esattamente la stessa della mia. Prendete qualsiasi semplice Expert Advisor da CodeBase, beh, almeno questo https://www.mql5.com/ru/code/138

Aprite il suo codice in MetaEditor e cominciate a studiare i commenti che si trovano in ogni linea del codice. Ci sono EA in cui tutti i commenti sono scritti in inglese. Se non conosci bene la lingua, Google Translator ti aiuterà. Se in qualsiasi Expert Advisor manca il commento alle linee, allora cercate in sequenza tutte le parole colorate nel codice del programma, mettete il cursore su di esse, premete il tasto F1 e le sezioni appropriate del manuale MQL5 si apriranno per voi. Leggi queste sezioni, commenta queste righe con parole tue, e se qualcosa non è chiaro, fai domande qui. In questo modo, vi muoverete più velocemente nell'apprendimento del linguaggio di programmazione.

Saluti, Vladimir.

Non capisco - è meglio cancellare ciò che ho tradito? - Che lui stesso, come imparare?

 
SanAlex:

Non capisco - è meglio cancellare quello che ho fatto? - in modo che possa imparare da solo?

Non cancellare, ma spiegare ciò che è scritto nei codici e perché viene fatto!

Sinceramente, Vladimir.

 
MrBrooklin:

Non cancellare, ma spiegare ciò che è scritto nei codici e perché viene fatto!

Con rispetto, Vladimir.

Io stesso sono autodidatta - e copio dai codici disponibili, - Il problema è che non so come spiegare come scolpire! - qualcosa dentro mi dice come scolpire.

----------------------------------

So cosa ho modellato, quello che manca è un Thrall per la linea.

 
SanAlex:

Io stesso sono autodidatta - e copio dai codici disponibili, - Il problema è che non so come spiegare come scolpire! - qualcosa dentro mi dice come scolpire.

È proprio questo il problema! Quando ho iniziato a studiare il linguaggio MQL5, ho letto molti articoli sulla creazione di Expert Advisors. STARTING Non l'ho ancora trovato. Certo, ci sono alcuni articoli con link a Roman, ma non sono sufficienti, almeno per me.

Io stesso, per esempio, vedo un sacco di codici EA, ma nessun modo di capire perché questa o quella linea è stata scritta. Finora, ho avuto abbastanza cervello per riscrivere il codice da solo usando uno degli Expert Advisors già pronti.

Saluti, Vladimir.

 
MrBrooklin:

Questo è il problema! Ho letto molti articoli sulla creazione di Expert Advisors quando ho iniziato a studiare il linguaggio MQL5. PRINCIPIANTI Non l'ho ancora trovato. Certo, ci sono alcuni articoli con link a Roman, ma non sono sufficienti, almeno per me.

Per esempio, io stesso vedo molti codici di Expert Advisor, ma non riesco a capire perché è stata scritta questa o quella linea. Finora, ho avuto abbastanza cervello per riscrivere il codice da un Expert Advisor già pronto.

Sinceramente, Vladimir.

Cerco funzioni per i miei compiti - smonto una funzione man mano che comincio a capire come funziona, poi tutto è più facile da imparare.

 
SanAlex:

Cerco delle funzioni per i miei compiti - smonto la funzione man mano che comincio a capire come funziona, allora tutto è più facile da imparare.

Ecco un esempio dal vivo di un problema con cui ho lottato per più di un'ora. Ho bisogno di creare e visualizzare l'indicatore ZigZagColor sul grafico all'inizio dell'EA. È stato fatto in int OnInit:

   handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
                          Inp_ZZ_Depth,
                          Inp_ZZ_Deviation,
                          Inp_ZZ_Backstep);
   ChartIndicatorAdd(ChartID(),0,handle_iCustom);

L'indicatore è stato creato e visualizzato. Ora ho bisogno che l'indicatore venga cancellato dopo che l'Expert Advisor è stato cancellato. Lo sto scrivendo:

void OnDeinit(const int reason)
  {
//---
   IndicatorRelease(handle_iCustom);
   ObjectsDeleteAll(0,"Examples\\ZigzagColor");
  }

Ma l'indicatore non viene rimosso. Ho risolto tutto. Ho pulito la maniglia e applicato la funzione di cancellazione. Mi chiedo quale sia la ragione per cui non si disinstalla.

Saluti, Vladimir.

 
MrBrooklin:

Ecco un esempio dal vivo di un problema con cui ho lottato per più di un'ora. Volevo che l'indicatore ZigZagColor fosse creato e visualizzato sul grafico all'avvio dell'EA. È stato fatto in int OnInit:

L'indicatore è stato creato e visualizzato. Ora ho bisogno che l'indicatore venga cancellato dopo che l'Expert Advisor è stato rimosso. Lo sto scrivendo:

Ma l'indicatore non viene rimosso. Ho risolto tutto. Ho pulito la maniglia e applicato la funzione di cancellazione. Mi chiedo quale sia la ragione per cui non si disinstalla.

Saluti, Vladimir.

C'è una funzione più complicata per cancellare

input string   t12="--- Indicator Delete    -----";              //
input string   Inpshort_name                = "Имя Индикатора";  // Delete Indicator Name
input string   Inpshort_name_1              = "Имя Индикатора";  // Delete Indicator Name
input bool     Inpres                       = false;             // Delete All Indicators
//+------------------------------------------------------------------+
//| ChartIndicatorDelete                                             |
//+------------------------------------------------------------------+
bool IndicatorDelete(void)
  {
     {ActionsOnTheChart(0);}
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ActionsOnTheChart(const long chart_id)
  {
   int sub_windows_total =-1;
   int indicators_total  =0;
//---
   if(!ChartWindowsTotal(chart_id,sub_windows_total))
     {
      return(false);
     }
//---
   for(int i=sub_windows_total-1; i>=0; i--)
     {
      indicators_total=ChartIndicatorsTotal(chart_id,i);
      //---
      if(indicators_total>0)
        {
         ChIndicatorsDelete(chart_id,i,indicators_total);
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChartWindowsTotal(const long chart_ID,int &sub_windows_total)
  {
   long value=-1;
//---
   if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,value))
     {Print(__FUNCTION__," Error = ",GetLastError()); return(false);}
//---
   sub_windows_total=(int)value;
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorsDelete(const long  chart_id,
                        const int   sub_window,
                        const int   indicators_total)
  {
   for(int i=indicators_total-1; i>=0; i--)
     {
      string indicator_name=ChartIndicatorName(chart_id,sub_window,i);
      //---
      ChIndicatorDelete(indicator_name,chart_id,sub_window);
      ChartRedraw();
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorDelete(const string shortname,
                       const long   chartid=0,
                       const int    subwindow=0)
  {
   bool res=ChartIndicatorDelete(chartid,subwindow,Inpshort_name);
   bool res2=ChartIndicatorDelete(chartid,subwindow,Inpshort_name_1);
   if(Inpres)
      bool res0=ChartIndicatorDelete(chartid,subwindow,shortname);
//--- проанализируем результат вызова ChartIndicatorDelete()
   if(!res)
     {
      PrintFormat("%s",shortname,subwindow,GetLastError());
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
Motivazione: