Question Signal_Direction input Accelerator Oscillator

 

Hello, I would like to use a simple expert with the AC signal.

I want to insert a Signal_Direction into this. 


The Signal_Direction is intended to swap/mirror the input signal.


So the expert swapped/mirrored the purchase option with the ACSignal. Buy becomes sell and sell becomes buy. E.g. option 0/1 Same signal, different buy execution. 


Alternatively, an automatic solution. A second ACsignal which works parallel and switches the first AC signal variable.  basically 180°, a switch with the same ACSignal, to make the first right. 

A double ACsignal solution. First work permanently wrong and the other is a right variable switch. Parallel


Another idea? Laugh...


Here is a template, unfortunately it doesn't work, see error. Marking on the right side


The exact name of the function is just an example. 


Thanks and greetings Julian


//+------------------------------------------------------------------+
//|                                                        Indicatortraderspiegel.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalAC.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingFixedPips.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title                  ="Test2"; // Document name
ulong        Expert_MagicNumber            =31528;   //
bool         Expert_EveryTick              =true;   //
//--- inputs for main signal
input int    Signal_ThresholdOpen          =10;      // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose         =10;      // Signal threshold value to close [0...100]
input double Signal_PriceLevel             =0.0;     // Price level to execute a deal
input double Signal_StopLevel              =2.50;    // Stop Loss level (in points)
input double Signal_TakeLevel              =0.1;    // Take Profit level (in points)
input int    Signal_Expiration             =1;       // Expiration of pending orders (in bars)
input double Signal_AC_Weight              =0.2;     // Accelerator Oscillator Weight [0...1.0]
input double Signal_Direction              =0;        // Input Signal Direktion (0/1)                                   <--------------------- Option?
//--- inputs for trailing
input int    Trailing_FixedPips_StopLevel  =0;      // Stop Loss trailing level (in points)
input int    Trailing_FixedPips_ProfitLevel=0;      // Take Profit trailing level (in points)
//--- inputs for money
input double Money_FixLot_Percent          =10.0;    // Percent
input double Money_FixLot_Lots             =0.1;     // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration); 
//--- Creating filter CSignalAC
   CSignalAC *filter0=new CSignalAC;
   if(filter0==NULL)
   
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.Weight(Signal_AC_Weight);
   filter0.Dirction(Signal_Direction);                                                                  <-----------------Option
//--- Creation of trailing object
   CTrailingFixedPips *trailing=new CTrailingFixedPips;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
   trailing.StopLevel(Trailing_FixedPips_StopLevel);
   trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);
//--- Creation of money object
   CMoneyFixedLot *money=new CMoneyFixedLot;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {  
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 
The code was not hand written, it was created by a generator. There are a few errors, the code has to be rewritten the correct way in order for it to work. Maybe if you find someone here with the time on their hands, they might help you. Do not use Chat GPT or any other generators to code for you. They DO NOT WORK