Come ho assemblato il mio consulente per tentativi ed errori - pagina 46

 

L'indicatore ha 4 linee orizzontali - 2 di loro lavorano dall'indicatore Heiken_Ashi

2 livelli da cui si può comprare o vendere. Quando si incrociano in rosso, si ottiene un segnale -quando si incrociano in blu, si ottiene un altro segnale

EURJPYM1

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

quando è nel mezzo (tra le linee (rosso e blu) i segnali non funzionano - funzionerà, come uscirà da entrambi i lati

File:
LN_2.mq5  22 kb
 
Alexsandr San:

L'indicatore ha 4 linee orizzontali - 2 di loro lavorano dall'indicatore Heiken_Ashi

2 livelli da cui si può comprare o vendere. Quando si incrociano in rosso, si ottiene un segnale -quando si incrociano in blu, si ottiene un altro segnale

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

quando si trova nel mezzo (tra le linee (rosso e blu) i segnali non funzionano - funzionerà, come andare in entrambe le direzioni

Ho allegato l'Expert Advisor a questo indicatore

È necessario installare l'indicatore sul grafico, poi installare l'Expert Advisor sullo stesso grafico

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

dopo l'apertura di una posizione l'indicatore è stato cancellato. dopo un po' ho impostato di nuovo l'indicatore (come controllare il lavoro dell'Expert)

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

quando scatta un segnale, apre una posizione e cancella l'indicatore insieme alle linee


File:
Exp_LN_2.mq5  20 kb
 

Combinazione di due esperti per il trading manuale

questohttps://www.mql5.com/ru/code/24803

e questohttps://www.mql5.com/ru/code/26353

AutoClose Line
AutoClose Line
  • www.mql5.com
Помощник закрытия позиции, если цена пересекла линию: Правило закрытия: цена Open и цена Close текущего бара должны оказаться по разные стороны от линии. Имя линии задаётся в параметре "Line name" - эту линию пользователь проводит сам. Тип линии может быть...
File:
 
Alexsandr San:

Combinazione di due esperti per il trading manuale

questohttps://www.mql5.com/ru/code/24803

e questohttps://www.mql5.com/ru/code/26353

Aggiunta un'altra linea

//+------------------------------------------------------------------+
//| Enum Lor or Risk                                                 |
//+------------------------------------------------------------------+
enum ENUM_TRADE_COMMAND
  {
   close_buys=0,     // Close All Buy's
   close_sells=1,    // Close All Sell's
   close_all=2,      // Close All Buy's and Sell's
   open_buy=3,       // Open Buy
   open_sell=4,      // Open Sell
   open_buy_sell=5,  // Open Buy and Sell
  };
//--- input parameters
input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots
input ushort   InpSignalsFrequency          = 10;                // Search signals, in seconds (min value "10")
input string   InpNameR                     = "LineR";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandR   = close_all;         // Trade command:
input bool     ObjRevers                    = false;             // Obj: Revers
input string   InpNameS                     = "LineS";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandS   = close_all;         // Trade command:
input ulong    InpMagic                     = 78712995;          // Magic number
//---
File:
 
Alexsandr San:

Aggiunta un'altra linea.

Per un esperto a tutti gli effetti, manca -

1 - Stop Loss, Take Profit in pip (non visibile)

2 - Trailing Stop dalla linea orizzontale

3 - Segnale dall'indicatore

Modifico ulteriormente l'Expert Advisor2_LineOpenClose.mq5

//--- input parameters
input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots
input ushort   InpSignalsFrequency          = 10;                // Search signals, in seconds (min value "10")
input string   InpNameR                     = "LineR";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandR   = close_all;         // Trade command:
input bool     ObjRevers                    = false;             // Obj: Revers
input string   InpNameS                     = "LineS";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandS   = close_all;         // Trade command:
input ulong    InpMagic                     = 78712995;          // Magic number
//---
 
Alexsandr San:

Per un esperto a tutti gli effetti, manca -

1 - Stop Loss, Take Profit in pip (non visibile)

2 - Trailing Stop dalle linee orizzontali

3 - Il segnale dell'indicatore

Modifico ulteriormente l'Expert Advisor2_LineOpenClose.mq5

Aggiunto - Segnale dall'indicatore

in questo modo

//+------------------------------------------------------------------+
//| Get value of buffers                                             |
//+------------------------------------------------------------------+
double iGetArray(const int handle,const int buffer,const int start_pos,const int count,double &arr_buffer[])
  {
   bool result=true;
   if(!ArrayIsDynamic(arr_buffer))
     {
      Print("This a no dynamic array!");
      return(false);
     }
   ArrayFree(arr_buffer);
//--- reset error code
   ResetLastError();
//--- fill a part of the iBands array with values from the indicator buffer
   int copied=CopyBuffer(handle,buffer,start_pos,count,arr_buffer);
   if(copied!=count)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("Failed to copy data from the indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated
      return(false);
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(m_symbol.Name(),Period(),0);
   if(time_0==ExtPrevBarsY)
      return(true);
   ExtPrevBarsY=time_0;
   if(!m_symbol.RefreshRates())
     {
      ExtPrevBarsY=0;
      return(false);
     }
//---
   double BuyBuffer[];
   double SellBuffer[];
   ArraySetAsSeries(BuyBuffer,true);
   ArraySetAsSeries(SellBuffer,true);
   if(!iGetArray(handle_iCustom,1,0,2,BuyBuffer) || !iGetArray(handle_iCustom,0,0,2,SellBuffer))
     {
      ExtPrevBarsY=0;
      return(false);
     }
//---
   if(BuyBuffer[1]!=0.0)
     {
      switch(InpTradeCommandY)
        {
         case  close_buys:
            ExtNeedCloseBuy=true;
            if(LongObjClosed())
               break;
         case  close_sells:
            ExtNeedCloseSell=true;
            if(ShortObjClosed())
               break;
         case close_all:
            ExtNeedCloseAll=true;
            if(LongShortObjClosed())
               break;
         case open_buy:
            ExtNeedOpenBuy=true;
            if(LongObjOpened())
               break;
         case open_sell:
            ExtNeedOpenSell=true;
            if(ShortObjOpened())
               break;
         default:
            ExtNeedOpenBuySell=true;
            if(LongShortObjOpened())
               break;
        }
     }
   if(SellBuffer[1]!=0.0)
     {
      switch(InpTradeCommandU)
        {
         case  close_buys:
            ExtNeedCloseBuy=true;
            if(LongObjClosed())
               break;
         case  close_sells:
            ExtNeedCloseSell=true;
            if(ShortObjClosed())
               break;
         case close_all:
            ExtNeedCloseAll=true;
            if(LongShortObjClosed())
               break;
         case open_buy:
            ExtNeedOpenBuy=true;
            if(LongObjOpened())
               break;
         case open_sell:
            ExtNeedOpenSell=true;
            if(ShortObjOpened())
               break;
         default:
            ExtNeedOpenBuySell=true;
            if(LongShortObjOpened())
               break;
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Ora nelle impostazioni

//--- input parameters
input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots
input ushort   InpSignalsFrequency          = 10;                // Search signals, in seconds (min value "10")
input string   InpNameR                     = "LineR";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandR   = open_buy;          // Trade command:
input string   InpNameS                     = "LineS";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandS   = open_sell;         // Trade command:
input string   short_name             = "Examples\\ZigzagColor"; // Name Indicators
input ENUM_TRADE_COMMAND InpTradeCommandY   = open_buy;          // Trade command: (BuyBuffer Indicators)
input ENUM_TRADE_COMMAND InpTradeCommandU   = open_sell;         // Trade command: (SellBuffer Indicators)
input bool     ObjRevers                    = false;             // Obj: Revers
//---

Controllo di un segnale indicatore

par

graf

File:
XXX_Ind.mq5  52 kb
 
Alexsandr San:

Per un esperto a tutti gli effetti, manca -

1 - Stop Loss, Take Profit in pip (non visibile)

2 - Trailing Stop dalle linee orizzontali

3 - Il segnale dell'indicatore

Metterò a punto l'Expert Advisor2_LineOpenClose.mq5

Ho anche aggiunto ilTrailing Stop dalla linea orizzontale. Ho aggiunto più o meno tutto e ora controllo la sua lavorabilità.

Ecco le impostazioni

//+------------------------------------------------------------------+
input string   t="-----  Parameters         -----";              //
input string   Template                     = "ADX";             // Имя шаблона(without '.tpl')
input double   TargetProfit                 = 999999.99;         // Цель Баланса(Ваш Баланс + сумма)
input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots
input int      InpTakeProfit                = 50;                // Take Profit ("0"-No. 5<100)
input string   t0="----- Trailing Line      -----";              //
input string   InpObjUpName                 = "TOP";             // Obj: TOP (Horizontal Line)
input ENUM_TRADE_COMMAND InpTradeCommand    = close_sells;       // Obj:  command:
input string   InpObjDownName               = "LOWER";           // Obj: LOWER (Horizontal Line)
input ENUM_TRADE_COMMAND InTradeCommand     = close_buys;        // Obj:  command:
input ushort   InpObjTrailingStop           = 30;                // Obj: Trailing Stop (distance from price to object, in pips)
input ushort   InpObjTrailingStep           = 5;                 // Obj: Trailing Step, in pips (1.00045-1.00055=1 pips)
input string   t1="----- Line name: 1       -----";              //
input string   InpNameR                     = "LineR";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandR   = open_buy;          // Trade command:
input string   t2="----- Line name: 2       -----";              //
input string   InpNameS                     = "LineS";           // Line name (Horizontal Line or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommandS   = open_sell;         // Trade command:
input string   t3="----- Indicators:        -----";              //
input string   short_name                   = "Examples\\ZigzagColor"; // Name Indicators
input bool     InpIndicators                = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY   = open_buy;          // Trade command: (BuyBuffer Indicators)
input ENUM_TRADE_COMMAND InpTradeCommandU   = open_sell;         // Trade command: (SellBuffer Indicators)
input string   t4="----- Revers Buy><Sell   -----";              //
input bool     ObjRevers                    = false;             //  Revers
//---


File:
 
Alexsandr San:

Aggiunto ilTrailing Stop dalle linee orizzontali. Penso di aver aggiunto tutto, ora devo solo controllare se funziona.

Ecco le impostazioni

Il principio del lavoro, qui questi parametri.

Quando i fondi raggiungono un determinato obiettivo, tutte le posizioni saranno chiuse su tutte le coppie aperte, e tutti i grafici cambieranno in modello "ADX".

(È importante - è obbligatorio che le cifre sopra il vostro saldo siano scritte nelle impostazioni) e Expert Advisor chiuderà tutte le posizioni aperte e cambierà i grafici del modello

//+------------------------------------------------------------------+
input string   t="-----  Parameters         -----";              //
input string   Template                     = "ADX";             // Имя шаблона(without '.tpl')
input double   TargetProfit                 = 999999.99;         // Цель Баланса(Ваш Баланс + сумма)

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

parametro del lotto.

è possibile impostare una posizione come 0,06 o un numero di posizioni come 6 a 0,01

input uint     maxLimits                    = 1;                 // Кол-во Позиции Открыть в одну сторону
input double   InpLots                      = 0.01;              // Lots

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

parametro con Take ProfitT.

Viene attivato dal numero di pip (se è "0" chiuderà la posizione) è necessario specificare la distanza.

input int      InpTakeProfit                = 50;                // Take Profit ("0"-No. 5<100)

XXX_Trailing Line.mq5

 
Alexsandr San:

Aggiunto - Segnale dall'indicatore

come questo.

Nelle impostazioni ora è così

Controllo del segnale dell'indicatore

L'indicatore apre solo posizioni da chiudere, l'ho preso dall'Expert Advisor nel terminale (Moving Average)

Ho multato un po' di inversione

//+------------------------------------------------------------------+
//| Check for close position conditions                              |
//+------------------------------------------------------------------+
void CheckForClose(void)
  {
//---
   double BuyBuffer[];
   double SellBuffer[];
   ArraySetAsSeries(BuyBuffer,true);
   ArraySetAsSeries(SellBuffer,true);
   if(!iGetArray(handle_iCustom,1,0,2,BuyBuffer) || !iGetArray(handle_iCustom,0,0,2,SellBuffer))
     {
      return;
     }
//--- positions already selected before
   bool signal=false;
   long type=PositionGetInteger(POSITION_TYPE);
   if(ObjRevers)
     {
      if(type==(long)POSITION_TYPE_BUY && BuyBuffer[1]!=0.0)
         signal=true;
      if(type==(long)POSITION_TYPE_SELL && SellBuffer[1]!=0.0)
         signal=true;
     }
   if(!ObjRevers)
     {
      if(type==(long)POSITION_TYPE_BUY && SellBuffer[1]!=0.0)
         signal=true;
      if(type==(long)POSITION_TYPE_SELL && BuyBuffer[1]!=0.0)
         signal=true;
     }
//--- additional checking
   if(signal)
     {
      if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         m_trade.PositionClose(_Symbol,3);
     }
//---
  }
//+------------------------------------------------------------------+

Foto di

Il più semplice sistema di trading usando indicatori semaforici

13 gennaio 2012, 13:27



Esempi di semafori tipici, indicatori di segnali

Ci sono molti indicatori simili nel Code Base al momento. Per lo scopo di questo articolo, darò solo alcuni link alle risorse di origine:


File:
 
Alexsandr San:

Dall'indicatore, apre solo posizioni, per chiudere, ho preso il modo dall'Expert Advisor nel terminale (media mobile)

Ho fatto un po' di pinneggiate in retromarcia

Non mi piace quando chiudo una posizione. Sto cercando un modo per correggere la funzione, per chiudere una posizione da un indicatore

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

L'ho aggiustato, l'ho aggiunto dall'indicatore della media mobile

//+------------------------------------------------------------------+
//| Position select depending on netting or hedging                  |
//+------------------------------------------------------------------+
bool SelectPosition()
  {
   bool res=false;
//--- check position in Hedging mode
   if(ExtHedging)
     {
      uint total=PositionsTotal();
      for(uint i=0; i<total; i++)
        {
         string position_symbol=PositionGetSymbol(i);
         if(_Symbol==position_symbol && InpMagic==PositionGetInteger(POSITION_MAGIC))
           {
            res=true;
            break;
           }
        }
     }
//--- check position in Netting mode
   else
     {
      if(!PositionSelect(_Symbol))
         return(false);
      else
         return(PositionGetInteger(POSITION_MAGIC)==InpMagic); //---check Magic number
     }
//--- result for Hedging mode
   return(res);
  }
//+------------------------------------------------------------------+

e in OnTick()

      if(InpCloseOpposite && InpIndicators)
        {
         //---
         if(SelectPosition())
            CheckForClose();
         else
            SearchTradingSignals();
        }
      if(!InpCloseOpposite && InpIndicators)
        {
         SearchTradingSignals();
        }

risulta cheSelectPosition() dovrebbe passarci attraverso

File:
Motivazione: