Goblin BiPolar Edition v[1].2.0 Mod H_fibo+Perky

Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
Goblin BiPolar Edition v[1].2.0 Mod H_fibo+Perky
// Goblin BiPolar Edition v.2.0 Mod H_fibo4
// by bluto @ www.forex-tsd.com
// 12/20/2006
// autofx touches added late December 2006 and early January 2007
// http://autoforex.biz, http://automaticforex.invisionzone.com/
// perky indicator and mods
// these settings are for 1 Hour
extern string    SystemWideParms = "** Goblin Systemwide Parameters **";

extern int       TimeFrame=15;
extern int       DiffPips =5;
extern bool      FiboProgressionPips=True;
extern bool      FiboProgressionLots=True;

extern double    ProfitTarget   = 100;//100;
extern double    ProfitMultiple =  1.05;

extern double    LotSize                    =  0.2;  // First order will be for this lot size
extern double    LotsIncreaseBy             =  1.3;  // New orders will be the previous size times this amount
extern int       Slippage                   =  3;
extern int       LotPrecision               =  2;    // Used for NormalizeDouble to determine number of decimal places on lot size
extern bool      UseMoneyMgmt               = True;  // if true, the lots size will increase based on account size 
extern double    EquityProtectionLevel      =  0.0;  // Min. equity to preserve in the event things go bad; all orders for Symbol/Magic will be closed.
extern double    MaxLossPerOrder            =  0.0;  // Max. loss tolerance per order; once reached, order will be closed.  
extern double    RiskPercent                =  0.5;  // risk to calculate the lots size (only if mm is enabled)
extern bool      UseConservativeRSX_Signals = false; // If true, we use tighter RSX 70/30 rules
extern bool      StopAfterNoTrades          = false;

extern string    LongTradeParms = "** Goblin Buy Side Parameters **";
extern double    LongTakeProfit             = 15;    // Profit Goal for the latest order opened
extern double    LongInitialStop            =  0;    // StopLoss
extern double    LongTrailingStop           =  0;    // Pips to trail the StopLoss
extern int       LongMaxTrades              =  5;    // Maximum number of orders to open
extern int       LongPips                   = 15;    // Distance in Pips from one order to another
extern int       LongSecureProfit           = 0;    // If profit made is bigger than SecureProfit we close the orders
extern bool      LongAccountProtection      = false; // If one the account protection will be enabled, 0 is disabled
extern int       LongOrderstoProtect        =  0;    // This number subtracted from LongMaxTrades is the number
                                                     // of open orders to enable the account protection.
                                                     // Example: (LongMaxTrades=10) minus (OrderstoProtect=3) = 7 orders
                                                     // need to be open before account protection is enabled.
                                                
extern string    ShortTradeParms = "** Goblin Sell Side Parameters **";

extern double    ShortTakeProfit            = 15;    // Profit Goal for the latest order opened
extern double    ShortInitialStop           =  0;    // StopLoss
extern double    ShortTrailingStop          =  0;    // Pips to trail the StopLoss
extern int       ShortMaxTrades             =  5;    // Maximum number of orders to open
extern int       ShortPips                  = 15;    // Distance in Pips from one order to another
extern int       ShortSecureProfit          =  0;    // If profit made is bigger than SecureProfit we close the orders
extern bool      ShortAccountProtection     = false; // If one the account protection will be enabled, 0 is disabled
extern int       ShortOrderstoProtect       =  0;    // This number subtracted from LongMaxTrades is the number
                                                     // of open orders to enable the account protection.
                                                     // Example: (LongMaxTrades=10) minus (OrderstoProtect=3) = 7 orders
                                                     // need to be open before account protection is enabled. 
                                                 


// Autofx variables

int    i, NumBuys, NumSells;
double MinLots, MaxLots, SymbolPL, EquityExit;
string OrigBal;     double valOrigBal;
string EquityFlag;  int    valEquityFlag;
string GravyProfit; double valGravyProfit;
string CurrBalance; double valCurrBalance;
bool   CloseAll;
double BiggestLoser;
int    LoserTicket;

                                                 
// Global internal parameters used by LongGoblin() buy order module:   
                        
int    LongMagicNumber=0; // Magic number for the long orders placed                              
int    L_OpenOrders=0;
int    L_Count=0;
int    L_Slippage=5;
double L_sl=0;
double L_tp=0;
double BuyPrice=0;
double L_OrderLotSize=0;
int    L_Mode=0;
int    L_OrderType=0;
bool   L_ContinueOpening=true;
double L_LastPrice=0;
int    L_PreviousOpenOrders=0;
double L_Profit=0;
int    L_LastTicket=0;
int    L_LastType=0;
double L_LastClosePrice=0;
double L_LastLots=0;
double L_PipValue=0;

// Global internal parameters used by ShortGoblin() sell order module:
   
int    ShortMagicNumber = 0; // Magic number for the short orders placed                            
int    S_OpenOrders=0;
int    S_Count=0;
int    S_Slippage=5;
double S_sl=0;
double S_tp=0;
double SellPrice=0;
double S_OrderLotSize=0;
int    S_Mode=0;
int    S_OrderType=0;
bool   S_ContinueOpening=true;
double S_LastPrice=0;
int    S_PreviousOpenOrders=0;
double S_Profit=0;
int    S_LastTicket=0;
int    S_LastType=0;
double S_LastClosePrice=0;
double S_LastLots=0;
double S_PipValue=0;
//------------------------
double LastBuyPrice;
double LastSellPrice;
double lscci,lscci0,lsccib4,lscci1,diff,diff1;

// Global internal shared parameters

string           text="", text2="";
double           DnTrendVal=0,UpTrendVal=0,TrendVal=0;
string           TrendTxt="analyzing...";
int              RSX_Period=17;
int              trendtype=0;
bool             AllowTrading=true;
double           G_MinLotSize=0;
double           G_MaxLotSize=0;
double           G_LotStep=0;
double           G_Decimals=0;
int              G_AcctLeverage=0;
int              G_CurrencyLotSize=0;
double           G_OrderLotSize=0;
int              G_Count=0;
int              G_Slippage=5;


int init()
{
  // For those of us tired of messing around assigning annoying but essential magic numbers.
   
  init_magic();
  return(0);
}


int start()
{

  // Specify a name for the global variable that tracks gravy profit.
  OrigBal = AccountNumber()+"_"+Symbol()+"_"+Period()+"_OrigBal";
  // Define the variable if it doesn't already exist.
  if (!GlobalVariableCheck(OrigBal)) GlobalVariableSet(OrigBal, AccountBalance());
  // Set the value.
  valOrigBal = GlobalVariableGet(OrigBal);
  // Specify a name for the global Equity flag variable.
  EquityFlag = AccountNumber()+"_"+Symbol()+"_"+Period()+"_EquityFlag";
  // Define the variable if it doesn't already exist.
  if (!GlobalVariableCheck(EquityFlag)) GlobalVariableSet(EquityFlag, 0);
  // Get a value.
  valEquityFlag = GlobalVariableGet(EquityFlag);
  // Specify a name for the global variable that tracks Gravy profit.
  GravyProfit = AccountNumber()+"_"+Symbol()+"_"+Period()+"_GravyProfit";
  // Define the variable if it doesn't already exist.
  if (!GlobalVariableCheck(GravyProfit)) GlobalVariableSet(GravyProfit, 0.0);
  // Get a value.
  valGravyProfit = GlobalVariableGet(GravyProfit);
  // Specify a name for the global variable that tracks the current balance.
  CurrBalance = AccountNumber()+"_"+Symbol()+"_"+Period()+"_CurrBalance";
  // Define the variable if it doesn't already exist.
  if (!GlobalVariableCheck(CurrBalance)) GlobalVariableSet(CurrBalance, 0.0);
  // Get a value.
  valCurrBalance = GlobalVariableGet(CurrBalance);

  //+------------------------------------------------------------------+
  //|                      Equity Pop Time !!!                         |   
  //+------------------------------------------------------------------+  


  if (CloseAll)
  {
    for(i = OrdersTotal()-1; i >= 0; i--)
    {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if (OrderSymbol() == Symbol())
      {
        if (OrderType() == OP_BUY && OrderProfit() < 0) 
        {
         // Comment("In grid closure mode.  Closing a loser...");
          Print("In grid closure mode.  Closing a loser...");
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
        }    

        if (OrderType() == OP_SELL && OrderProfit() < 0)
        {
        //  Comment("In grid closure mode.  Closing a loser...");
          Print("In grid closure mode.  Closing a loser...");
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
        }
      }
    }

    for(i = OrdersTotal()-1; i >= 0; i--)
    {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

      if (OrderSymbol() == Symbol())
      {
        if (OrderType() == OP_BUY && OrderProfit() >= 0) 
        {
         // Comment("In grid closure mode.  Closing a winner...");
          Print("In grid closure mode.  Closing a winner...");
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
        }    

        if (OrderType() == OP_SELL && OrderProfit() >= 0)
        {
         // Comment("In grid closure mode.  Closing a winner...");
          Print("In grid closure mode.  Closing a winner...");
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);
        }
      }
    }
    GlobalVariableSet(GravyProfit, 0);
    GlobalVariableSet(EquityFlag, 0);
  }

  if (valGravyProfit == 0) GlobalVariableSet(OrigBal, AccountBalance());

  //+------------------------------------------------------------------+
  //|                     Spread Checks & Pip Values                   |   
  //+------------------------------------------------------------------+ 

  NumBuys  = 0;
  NumSells = 0;
  SymbolPL = 0.0;
  BiggestLoser = 0.0;
  LoserTicket  = 0;

  for(i = 0; i < OrdersTotal(); i++)
  {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

    if (OrderSymbol() == Symbol())
    {
      if (OrderProfit() < BiggestLoser)
      {
        BiggestLoser = OrderProfit();
        LoserTicket  = OrderTicket();
      }

      if (OrderSymbol() == Symbol()) 
      {
        SymbolPL += OrderProfit();

        if (OrderType() == OP_BUY)  NumBuys++;
        if (OrderType() == OP_SELL) NumSells++;
      }   
    }
  }
  
  if (NumBuys+NumSells == 0)
  {
   // Comment("There are no trades open.");
  
    if (StopAfterNoTrades) return(0);

    CloseAll = false;
  }
  else
  if (NumBuys+NumSells > 0               &&
      AccountBalance() != valCurrBalance &&
      valEquityFlag > 0)
  {
    if (AccountBalance() < valCurrBalance &&
        valEquityFlag == 2)
      valGravyProfit = 0;
    else
      valGravyProfit = valGravyProfit + (AccountBalance() - valCurrBalance);

    GlobalVariableSet(GravyProfit, valGravyProfit);
    GlobalVariableSet(EquityFlag, 0);
  }

  GlobalVariableSet(CurrBalance, AccountBalance());

    
  EquityExit = (valOrigBal * ProfitMultiple) - valOrigBal;


  if (!CloseAll                                &&
      (valGravyProfit + SymbolPL >= EquityExit ||
       AccountEquity() >= valOrigBal * ProfitMultiple))
  {
    CloseAll = true; 
    return(0);
  }
  
  for(i = 0; i <OrdersTotal(); i++)
  {
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

    if (OrderSymbol() == Symbol())
    {
      //+------------------------------------------------------------------+
      //|                      Manage Our Open Buy Orders                  |   
      //+------------------------------------------------------------------+  
      
      if (OrderType() == OP_BUY)
      {
        if (BiggestLoser < 0.0                         &&
            valGravyProfit + BiggestLoser > EquityExit &&
            OrderTicket() == LoserTicket)
        {
         // Comment("Closing the biggest loser, a buy trade...");
          Print("Closing the biggest loser, a buy trade...gravy is ", valGravyProfit, ", biggest loser is ", BiggestLoser, ", extra $ is ", EquityExit);
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,LightBlue);
          GlobalVariableSet(EquityFlag, 2);
          return(0);
        }

        if (Bid - OrderOpenPrice() >= ProfitTarget*Point)
        {
         // Comment("Closing a winning buy trade...");
          OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,LightBlue);
          GlobalVariableSet(EquityFlag, 1);
          Print ("Errors Closing *in profit* BUY order = ",GetLastError()); 
          return(0);
        }
      }

      //+------------------------------------------------------------------+
      //|                      Manage Our Open Sell Orders                 |   
      //+------------------------------------------------------------------+
      
      if (OrderType() == OP_SELL)
      {
        if (BiggestLoser < 0.0                         &&
            valGravyProfit + BiggestLoser > EquityExit &&
            OrderTicket() == LoserTicket)
        {
         // Comment("Closing the biggest loser, a sell trade...");
          Print("Closing the biggest loser, a sell trade...gravy is ", valGravyProfit, ", biggest loser is ", BiggestLoser, ", extra $ is ", EquityExit);
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,LightPink);
          GlobalVariableSet(EquityFlag, 2);
          return(0);
        }

        if (OrderOpenPrice() - Ask >= ProfitTarget*Point)
        {
        //  Comment("Closing a sell trade...");
          OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,LightPink);
          GlobalVariableSet(EquityFlag, 1);
          Print ("Errors Closing *in profit* SELL order = ",GetLastError()); 
          return(0);
        }
      }
    }
  }  
  
  
  //=========================== Begin Top Level Command Module ===========================
 
  // Global equity/risk based lot sizer

  G_AcctLeverage = AccountLeverage();
  G_MinLotSize = MarketInfo(Symbol(),MODE_MINLOT);
  //G_MaxLotSize = MarketInfo(Symbol(),MODE_MAXLOT);
  G_MaxLotSize = 50.0;
  G_LotStep = MarketInfo(Symbol(),MODE_LOTSTEP);
  G_CurrencyLotSize = MarketInfo(Symbol(),MODE_LOTSIZE);

  if(G_LotStep == 0.01) {G_Decimals = 2;}
  if(G_LotStep == 0.1) {G_Decimals = 1;}

  if (UseMoneyMgmt)
  {
    G_OrderLotSize = AccountEquity() * (RiskPercent * 0.01) / (G_CurrencyLotSize / G_AcctLeverage);
    G_OrderLotSize = StrToDouble(DoubleToStr(G_OrderLotSize,G_Decimals));
  }
  else
  {
    G_OrderLotSize = LotSize;
  }

  if (G_OrderLotSize < G_MinLotSize) {G_OrderLotSize = G_MinLotSize;}
  if (G_OrderLotSize > G_MaxLotSize) {G_OrderLotSize = G_MaxLotSize;}
 
    
  // Minimum Equity Level to protect to protect from being wiped out
  // in the event things really get wicked...more elegant risk control stuff.
      
  if(EquityProtectionLevel > 0 && AccountEquity() <= EquityProtectionLevel)
  {
    AllowTrading = false;
    Print("Min. Equity Level Reached - Trading Halted & Orders Closed");
    Alert("Min. Equity Level Reached - Trading Halted & Orders Closed");

    for(G_Count=OrdersTotal();G_Count>=0;G_Count--)
    {
      OrderSelect(G_Count, SELECT_BY_POS, MODE_TRADES);	  	  
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),G_Slippage,Blue);
      GlobalVariableSet(EquityFlag, 1);
    }	 
    return(0);		   
  }

  if (AllowTrading)
  {
    LongGoblin();
    ShortGoblin();
  }
   
 // Comment("Balance: ", AccountBalance(), ", Equity: ", AccountEquity(), ", Lots: ",OrderLots(),
  //      "\nNum Buys: ", NumBuys, ", Num Sells: ", NumSells,
  //      "\nGravy: ", valGravyProfit, "\nSymbolPL: ", SymbolPL,
  //      "\nGravy + PL: ", valGravyProfit + SymbolPL, "\nDollar Target: ", EquityExit,
  //      "\nPip Target: ", ProfitTarget,
  //      "\nGravy + Biggest Loser: ", valGravyProfit + BiggestLoser,
  //      "\nOrig Bal: ", valOrigBal,
  //      "\nBiggest Loser: ", BiggestLoser, ",   Ticket: ", LoserTicket,
        //"\nFibo: ", Fibo_num(1)," ",Fibo_num(2)," ",Fibo_num(3)," ",Fibo_num(4)," ",Fibo_num(5)," ",Fibo_num(6)," ",Fibo_num(7)," ",Fibo_num(8)," ",Fibo_num(9),
   //     "\nFibo Sell: ", Fibo_num(S_OpenOrders)  , ",   S_OpenOrders: ", S_OpenOrders, ",   S_Lots: ", S_OrderLotSize,
   //     "\nFibo Buy: ", Fibo_num(L_OpenOrders)  , ",   L_OpenOrders: ", L_OpenOrders, ",   L_Lots: ", L_OrderLotSize
   //     "\nJmaDiff ",  (MathAbs(jma1 - jma2) );
  

  return(0);
}  
   
//============================ End Of Top Level Command Module =========================





//========================= Begin Buy Order Processing SubRoutine ======================

void LongGoblin()
{
  if (MathAbs(MaxLossPerOrder) > 0)
  {
    for(L_Count=OrdersTotal();L_Count>=0;L_Count--) 
    {
      RefreshRates();
      OrderSelect(L_Count,SELECT_BY_POS,MODE_TRADES);

      if (OrderSymbol() == Symbol())
      {
        if (OrderType()   == OP_BUY && OrderMagicNumber() == LongMagicNumber &&
            OrderProfit() <=  MathAbs(MaxLossPerOrder) * (-1))
        {
          OrderClose(OrderTicket(),OrderLots(),Bid,L_Slippage,White); GlobalVariableSet(EquityFlag, 1); }

          if (OrderType() == OP_SELL && OrderMagicNumber() == LongMagicNumber &&
              OrderProfit() <= MathAbs(MaxLossPerOrder) * (-1))
          {
            OrderClose(OrderTicket(),OrderLots(),Ask,L_Slippage,White);
            GlobalVariableSet(EquityFlag, 1);
          }
        }
      }
    }
    
    L_Profit=0;
    L_OpenOrders=0;

    for(L_Count=0;L_Count<OrdersTotal();L_Count++)   
    {
      OrderSelect(L_Count, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() == Symbol() &&
          OrderMagicNumber() == LongMagicNumber)
      {
        L_OpenOrders++;
        L_Profit=L_Profit + OrderProfit();
      }
    }     

    L_PipValue = MarketInfo(Symbol(),MODE_TICKVALUE);

    if (L_PipValue==0)
    {
      L_PipValue=5;
    }
   
    if (L_PreviousOpenOrders > L_OpenOrders) 
    {	  
      for(L_Count = OrdersTotal(); L_Count >= 0; L_Count--)
      {
        OrderSelect(L_Count, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol()==Symbol()               &&
            OrderMagicNumber() == LongMagicNumber &&
            OrderType() == OP_BUY)
        {
          int m_Ticket = OrderTicket();

          OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),L_Slippage,Blue);
          GlobalVariableSet(EquityFlag, 1);
          Print("Closing Buy Order ",m_Ticket);
	  return(0);
        }
      }
    }

    L_PreviousOpenOrders=L_OpenOrders;

    if (L_OpenOrders>=LongMaxTrades) 
    {
      L_ContinueOpening = false;
    }
    else
    {
      L_ContinueOpening = true;
    }

    if (L_LastPrice == 0) 
    {
      for(L_Count=0;L_Count<OrdersTotal();L_Count++)
      {
        OrderSelect(L_Count, SELECT_BY_POS, MODE_TRADES);

        if (OrderSymbol()==Symbol()               &&
            OrderMagicNumber() == LongMagicNumber &&
            OrderType() == OP_BUY)
        {
          L_LastPrice=OrderOpenPrice();
          L_OrderType=2;
        }
      }
    }

    if (L_OpenOrders < 1)
    {
      //L_OrderType = OpenOrdersBasedOnTrendRSX();
      L_OrderType = OpenOrdersBasedOnClose12();
    }
 
    // Here comes the fun part we all waited for where we update those trailing stops....yippeekyeah!!

    for(L_Count = OrdersTotal(); L_Count >= 0; L_Count--)
    {
      OrderSelect(L_Count, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() == Symbol()             &&
          OrderMagicNumber() == LongMagicNumber &&
          OrderType()== OP_BUY)  
      {	
        if (LongTrailingStop > 0                                       &&
           (Bid-OrderOpenPrice() >= (LongTrailingStop+LongPips1())*Point) &&
           (OrderStopLoss() < (Bid-Point*LongTrailingStop)))
        {
          OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*LongTrailingStop,OrderClosePrice()+LongTakeProfit*Point+LongTrailingStop*Point,800,Yellow);
          return(0);
        } 
      }
    }
   
    L_Profit         = 0;
    L_LastTicket     = 0;
    L_LastType       = 0;
    L_LastClosePrice = 0;
    L_LastLots       = 0;

    for(L_Count = 0; L_Count < OrdersTotal(); L_Count++)
    {
      OrderSelect(L_Count, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol()==Symbol()               &&
          OrderMagicNumber() == LongMagicNumber &&
          OrderType()==OP_BUY) 
      {			
        L_LastTicket     = OrderTicket();
        L_LastType       = OP_BUY;
        L_LastClosePrice = OrderClosePrice();
        L_LastLots       = OrderLots();
        L_Profit         = L_Profit+OrderProfit();	
      }
    }
	
    if (L_OpenOrders >= (LongMaxTrades-LongOrderstoProtect) &&
        LongAccountProtection) 
    {
      if (L_Profit >= LongSecureProfit) 
      {
        OrderClose(L_LastTicket,L_LastLots,L_LastClosePrice,L_Slippage,Yellow);
        GlobalVariableSet(EquityFlag, 1);
        L_ContinueOpening = false;
        return(0);
      }
    }
    //if(LongTrade && (LastBuyPrice - Ask) >= (PipStep1(total)*Point))
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
    if (L_OrderType == 2 && L_ContinueOpening && ((L_LastPrice-Ask) >= LongPips1()*Point || L_OpenOrders < 1)) 
    //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      
    {  		
      BuyPrice    = Ask;
      L_LastPrice = 0;

      if (LongTakeProfit == 0)
      {
        L_tp=0;
      }
      else
      {
        L_tp = BuyPrice+LongTakeProfit*Point;
      }

      if (LongInitialStop == 0)
      {
        L_sl=0;
      }
      else
      {
        L_sl = NormalizeDouble(BuyPrice - LongInitialStop*Point - (LongMaxTrades - L_OpenOrders)*LongPips1()*Point, Digits);
      }

      if (L_OpenOrders != 0)
      {
        L_OrderLotSize = G_OrderLotSize;

        for (L_Count = 1; L_Count <= L_OpenOrders; L_Count++)
        {
          if (LongMaxTrades > 12)
          {
            L_OrderLotSize = NormalizeDouble(L_OrderLotSize*LotsIncreaseBy_L(),LotPrecision);
          }
          else
          {
            L_OrderLotSize = NormalizeDouble(L_OrderLotSize*LotsIncreaseBy_L(),LotPrecision);
          }
        }
      }
      else
      {
        L_OrderLotSize = G_OrderLotSize;
      }

      if (L_OrderLotSize > G_MaxLotSize) L_OrderLotSize = G_MaxLotSize;


//        OrderSend(Symbol(),OP_BUY,L_OrderLotSize,BuyPrice,L_Slippage,L_sl,L_tp,"Goblin BiPolar Buy",LongMagicNumber,0,Blue);		    
        OrderSend(Symbol(),OP_BUY,L_OrderLotSize,BuyPrice,L_Slippage,L_sl,0,"Goblin BiPolar Buy",LongMagicNumber,0,Blue);		    
        return(0);   
      }   
      return(0);
    }


//========================= Begin Sell Order Processing SubRoutine ======================


void ShortGoblin()
{   
  if (MathAbs(MaxLossPerOrder) > 0)
  {
    for(S_Count = OrdersTotal(); S_Count>=0; S_Count--)
    {
      RefreshRates();

      OrderSelect(S_Count,SELECT_BY_POS,MODE_TRADES);

      if (OrderSymbol() == Symbol())
      {         
        if (OrderType() == OP_SELL                 &&
            OrderMagicNumber() == ShortMagicNumber &&
            OrderProfit() <= MathAbs(MaxLossPerOrder) * (-1))
        {
          OrderClose(OrderTicket(),OrderLots(),Ask,L_Slippage,White);
          GlobalVariableSet(EquityFlag, 1);
        }
      }
    }
  }
    
  S_Profit     = 0;  
  S_OpenOrders = 0;

  for (S_Count = 0; S_Count < OrdersTotal(); S_Count++)
  {
    OrderSelect(S_Count, SELECT_BY_POS, MODE_TRADES);

    if (OrderSymbol()==Symbol() &&
        OrderMagicNumber() == ShortMagicNumber)
    {
      S_OpenOrders++;
      S_Profit = S_Profit+OrderProfit();
    }
  }     
      
  S_PipValue = MarketInfo(Symbol(),MODE_TICKVALUE);

  if (S_PipValue == 0) S_PipValue=5;
   
  if (S_PreviousOpenOrders > S_OpenOrders) 
  {	  
    for (S_Count = OrdersTotal(); S_Count >= 0; S_Count--)
    {
      OrderSelect(S_Count, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol() == Symbol()              &&
          OrderMagicNumber() == ShortMagicNumber &&
          OrderType() == OP_SELL)
      {
        int m_Ticket = OrderTicket();

        OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),S_Slippage,Red);
        GlobalVariableSet(EquityFlag, 1); 
        Print("Closing Sell Order ",m_Ticket);
        return(0);
      }
    }
  }

  S_PreviousOpenOrders = S_OpenOrders;

  if (S_OpenOrders >= ShortMaxTrades)
  {
    S_ContinueOpening = false;
  }
  else
  {
    S_ContinueOpening = true;
  }

  if (S_LastPrice == 0)
  {
    for(S_Count = 0; S_Count < OrdersTotal(); S_Count++)
    {	
      OrderSelect(S_Count, SELECT_BY_POS, MODE_TRADES);

      if (OrderSymbol()==Symbol()                &&
          OrderMagicNumber() == ShortMagicNumber &&
          OrderType() == OP_SELL) 
      {
        S_LastPrice=OrderOpenPrice();
        S_OrderType=1;
      }
    }
  }

  if (S_OpenOrders < 1) 
  {
    //S_OrderType = OpenOrdersBasedOnTrendRSX();
    S_OrderType = OpenOrdersBasedOnClose12();
  }  
      

  // Here comes the fun part we all waited for where we update those trailing stops....woohoo!!

  for (S_Count = OrdersTotal(); S_Count >= 0; S_Count--)
  {
    OrderSelect(S_Count, SELECT_BY_POS, MODE_TRADES);

    if (OrderSymbol() == Symbol()              &&
        OrderMagicNumber() == ShortMagicNumber &&
        OrderType()==OP_SELL) 
    {
      if (ShortTrailingStop > 0                                        &&
         (OrderOpenPrice()-Ask >= (ShortTrailingStop+ShortPips1())*Point) &&
         (OrderStopLoss() > (Ask+Point*ShortTrailingStop)))
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*ShortTrailingStop,OrderClosePrice()-ShortTakeProfit*Point-ShortTrailingStop*Point,800,Purple);
        return(0);	  					
      }
    }
  }

  S_Profit         = 0;
  S_LastTicket     = 0;
  S_LastType       = 0;
  S_LastClosePrice = 0;
  S_LastLots       = 0;	

  for (S_Count = 0; S_Count < OrdersTotal(); S_Count++)
  {
    OrderSelect(S_Count, SELECT_BY_POS, MODE_TRADES);

    if (OrderSymbol() == Symbol()              &&
        OrderMagicNumber() == ShortMagicNumber &&
        OrderType()==OP_SELL)
    {
      S_LastTicket    = OrderTicket();
      S_LastType      = OP_SELL;
      S_LastClosePrice= OrderClosePrice();
      S_LastLots      = OrderLots();
      S_Profit        = S_Profit+OrderProfit();			 	   
    }
  }
    
  if (S_OpenOrders >= (ShortMaxTrades-ShortOrderstoProtect) &&
      ShortAccountProtection) 
  {
    if (S_Profit >= ShortSecureProfit)
    {
      OrderClose(S_LastTicket, S_LastLots, S_LastClosePrice, S_Slippage, Yellow);
      GlobalVariableSet(EquityFlag, 1);
      S_ContinueOpening = false;
      return(0);
    }
  }
  //if(ShortTrade && (Bid - LastSellPrice) >= (PipStep1(total)*Point))
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
  if (S_OrderType == 1  && S_ContinueOpening && ((Bid-S_LastPrice) >= ShortPips1()*Point || S_OpenOrders < 1)) 
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
  {		
    SellPrice   = Bid;				
    S_LastPrice = 0;

    if (ShortTakeProfit == 0)
    {
      S_tp=0;
    }
    else
    {
      S_tp = SellPrice-ShortTakeProfit*Point;
    }

    if (ShortInitialStop == 0)
    {
      S_sl=0;
    }
    else
    {
      S_sl = NormalizeDouble(SellPrice+ShortInitialStop*Point + (ShortMaxTrades-S_OpenOrders)* ShortPips1()*Point, Digits);
    }

    if (S_OpenOrders != 0)
    {
      S_OrderLotSize = G_OrderLotSize;

      for(S_Count = 1; S_Count <= S_OpenOrders; S_Count++)
      {
        if (ShortMaxTrades > 12)
        {
          S_OrderLotSize = NormalizeDouble(S_OrderLotSize*LotsIncreaseBy_S(), LotPrecision);
        }
        else
        {
          S_OrderLotSize = NormalizeDouble(S_OrderLotSize*LotsIncreaseBy_S(), LotPrecision);
        }
      }
    }
    else
    {
      S_OrderLotSize=G_OrderLotSize;
    }

    if (S_OrderLotSize > G_MaxLotSize) S_OrderLotSize = G_MaxLotSize;



//    OrderSend(Symbol(),OP_SELL,S_OrderLotSize,SellPrice,S_Slippage,S_sl,S_tp,"Goblin Bipolar Sell",ShortMagicNumber,0,Red);		    		    
    OrderSend(Symbol(),OP_SELL,S_OrderLotSize,SellPrice,S_Slippage,S_sl,0,"Goblin Bipolar Sell",ShortMagicNumber,0,Red);		    		    
    return(0);    
  }
  return(0);
}  
  
int deinit()
{
  return(0);
}  
  

//========================= And here's the lovely Buy/Sell Signal Generator  ======================


/*int OpenOrdersBasedOnTrendRSX()
{
  int SignalOrderType = 3;
  double rsxcurr = 0,rsxprev1 = 0,rsxprev2 = 0,jma1 = 0,jma2 = 0;

  rsxcurr  = iCustom(Symbol(), Period(), "Turbo_JRSX", 17, 0, 1);
  rsxprev1 = iCustom(Symbol(), Period(), "Turbo_JRSX", 17, 0, 2);
  rsxprev2 = iCustom(Symbol(), Period(), "Turbo_JRSX", 17, 0, 3);

  jma1 = iCustom(Symbol(), PERIOD_M15, "Turbo_JMA", 28, -100, 0, 2);
  jma2 = iCustom(Symbol(), PERIOD_M15, "Turbo_JMA", 28, -100, 0, 3);
     
  UpTrendVal = iCustom(Symbol(), Period(), "Turbo_JVEL", 17, -100, 0, 1);
  DnTrendVal = iCustom(Symbol(), Period(), "Turbo_JVEL", 17, -100, 1, 1);
  TrendVal   = UpTrendVal + DnTrendVal;
  double um; um=  (MathAbs(jma1 - jma2) );
  
  // Let's check our very reliable super secret mega-signal...
Comment ("\nJmaDiff ", um  );
  
  if (MathAbs(jma1 - jma2) / Point > 2.0)
  {
    if (jma1 < jma2) SignalOrderType=1;
    if (jma1 > jma2) SignalOrderType=2;
  }

  // Welp, our mega-signal says no cigar...let's see what trusty 'ol RSX has to say...

  if (SignalOrderType == 3)
  {
    if (UseConservativeRSX_Signals)
    {
      if (rsxcurr  < rsxprev1 &&
          rsxcurr  < 70       &&
          rsxprev1 > 70       &&
          TrendVal < (-0.01))
      {
        SignalOrderType=1;
      } // we only go short on RSX downturns

      if (rsxcurr  > rsxprev1 &&
          rsxcurr  > 30       &&
          rsxprev1 < 30       &&
          TrendVal > 0.01)
      {
        SignalOrderType=2;
      } // we only go long on RSX upturns
    }

    if (!UseConservativeRSX_Signals)
    {            
      if (rsxcurr < rsxprev1 && TrendVal < (-0.01)) SignalOrderType = 1; // we only go short on RSX downturns
      if (rsxcurr > rsxprev1 && TrendVal > 0.01)    SignalOrderType = 2; // we only go long on RSX upturns
    }
  }  
  return(SignalOrderType);
}

*/
int OpenOrdersBasedOnClose12()
{
   int SignalOrderType = 3;
   double jma1 = 0,jma2 = 0;
    lscci0=iCustom(NULL,0,"LSwpr_in_color",14,0,1);
    lsccib4=iCustom(NULL,0,"LSwpr_in_color",14,0,2);
           jma1 = iCustom(Symbol(), PERIOD_M15, "Turbo_JMA", 28, -100, 0, 2);
           jma2 = iCustom(Symbol(), PERIOD_M15, "Turbo_JMA", 28, -100, 0, 3);
              diff=MathAbs(lscci0-lsccib4);
              
  // Let's check our very reliable super secret mega-signal...
  
  // double diff1=DiffPips*Point;
 //  double Cl2 = iClose(Symbol(),TimeFrame,2);
  // double Cl1 = iClose(Symbol(),TimeFrame,1);
   if(MathAbs(lscci0)<80 && MathAbs(lsccib4)>80)
    {//Sell
      
      SignalOrderType=2;
    }   
   if(MathAbs(lscci0)>20 && MathAbs(lsccib4)<20)
    {//Buy
      
      SignalOrderType=1;      
    }
    
    
     if (MathAbs(jma1 - jma2) / Point > 2.0)
  {
    if (jma1 < jma2) SignalOrderType=1;
    if (jma1 > jma2) SignalOrderType=2;
  }

    return(SignalOrderType);
}




/////////////////////////////////////////////////////////////////////////////////
int ShortPips1()
{
  int p1=ShortPips;
  if (FiboProgressionPips)  
  {
    for(int cnt=1;cnt<=S_OpenOrders;cnt++)
    {
      p1=ShortPips*Fibo_num(cnt+1);  // Fibonacci progression by Tross
    }
  }  
  else  
    p1=ShortPips;
  //Comment("");
  //Comment(p1);  
  return(p1);
}

int LongPips1()
{
  int p1=LongPips;
  if (FiboProgressionPips)  
  {
    for(int cnt=1;cnt<=L_OpenOrders;cnt++)
    {
      p1=LongPips*Fibo_num(cnt+1);  // Fibonacci progression by Tross
    }
  }  
  else  
    p1=LongPips;
  //Comment("");
  //Comment(p1);  
  return(p1);
}  

int LotsIncreaseBy_L()
{
  
  int l1=LotsIncreaseBy;
  if (FiboProgressionLots)  
  {
    for(int cnt=1;cnt<=L_OpenOrders;cnt++)
    {
      l1=Fibo_num(cnt);  // Fibonacci progression by Tross
    }
  }  
  else  
    l1=LotsIncreaseBy;
  //Comment("");
  //Comment(p1);  
  return(l1);
  
}  

int LotsIncreaseBy_S()
{
  
  int l1=LotsIncreaseBy;
  if (FiboProgressionLots)  
  {
    for(int cnt=1;cnt<=S_OpenOrders;cnt++)
    {
      l1=Fibo_num(cnt);  // Fibonacci progression by Tross
    }
  }  
  else  
    l1=LotsIncreaseBy;
  //Comment("");
  //Comment(p1); Fibo_num(S_OpenOrders)  
  return(l1);
  
}  

int Fibo_num(int cnt1)
{
return (MathRound(MathPow(1.6180339,cnt1+1)/MathSqrt(5)));
}



///////////////////////////////////////////////////////
void init_magic()
{

  if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD")
  {
    LongMagicNumber=100001;
    ShortMagicNumber=200001;
  }

  if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY")
  {
    LongMagicNumber=100002;
    ShortMagicNumber=200002;
  }

  if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD")
  {
    LongMagicNumber=100003;
    ShortMagicNumber=200003;
  }

  if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD")
  {
    LongMagicNumber=100004;
    ShortMagicNumber=200004;
  }

  if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY")
  {
    LongMagicNumber=100005;
    ShortMagicNumber=200005;
  }

  if (Symbol() == "EURAUDm" || Symbol() == "EURAUD")
  {
    LongMagicNumber=100006;
    ShortMagicNumber=200006;
  }

  if (Symbol() == "EURCADm" || Symbol() == "EURCAD")
  {
    LongMagicNumber=100007;
    ShortMagicNumber=200007;
  }

  if (Symbol() == "EURCHFm" || Symbol() == "EURCHF")
  {
    LongMagicNumber=100008;
    ShortMagicNumber=200008;
  }

  if (Symbol() == "EURGBPm" || Symbol() == "EURGBP")
  {
    LongMagicNumber=100009;
    ShortMagicNumber=200009;
  }

  if (Symbol() == "EURJPYm" || Symbol() == "EURJPY")
  {
    LongMagicNumber=100010;
    ShortMagicNumber=200010;
  }

  if (Symbol() == "EURUSDm" || Symbol() == "EURUSD")
  {
    LongMagicNumber=100011;
    ShortMagicNumber=200011;
  }

  if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF")
  {
    LongMagicNumber=100012;
    ShortMagicNumber=200012;}  
   

  if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY")
  {
    LongMagicNumber=100013;
    ShortMagicNumber=200013;
  }

  if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD")
  {
    LongMagicNumber=100014;
    ShortMagicNumber=200014;
  }

  if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY")
  {
    LongMagicNumber=100015;
    ShortMagicNumber=200015;
  }

  if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD")
  {
    LongMagicNumber=100016;
    ShortMagicNumber=200016;
  }

  if (Symbol() == "USDCHFm" || Symbol() == "USDCHF")
  {
    LongMagicNumber=100017;
    ShortMagicNumber=200017;
  }

  if (Symbol() == "USDJPYm" || Symbol() == "USDJPY")
  {
    LongMagicNumber=100018;
    ShortMagicNumber=200018;
  }

  if (Symbol() == "USDCADm" || Symbol() == "USDCAD")
  {
    LongMagicNumber=100019;
    ShortMagicNumber=200019;
  }

  if (LongMagicNumber  == 0) LongMagicNumber  = 100999;
  if (ShortMagicNumber == 0) ShortMagicNumber = 200999;

}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---