//------------------------------------------------------------------
#property copyright "www.forex-station.com"
#property link      "www.forex-station.com"
#property strict
//------------------------------------------------------------------


input double          MaxLot          = 2;                            // Maximum lots to risk
input double          LotsPer15K      = 1;                            // Lots per $15K in account

extern string         dummy1          = "";                           // . 
extern double         TakeProfit      = 500;                          // Initial take profit (in pips)
extern double         StopLoss        = 500;                          // Initial stop loss (in pips)
extern string         dummy2          = "";                           // Settings for indicators
input int             periods         = 10;                           // Super trend atr period
input int             inpMaPeriod     = 50;                           // Ma period
enum  enPrices
{
         pr_close,                                                    // Close
         pr_open,                                                     // Open
         pr_high,                                                     // High
         pr_low,                                                      // Low
         pr_median,                                                   // Median
         pr_typical,                                                  // Typical
         pr_weighted,                                                 // Weighted
         pr_average,                                                  // Average (high+low+open+close)/4
         pr_medianb,                                                  // Average median body (open+close)/2
         pr_tbiased,                                                  // Trend biased price
         pr_tbiased2,                                                 // Trend biased (extreme) price
         pr_haclose,                                                  // Heiken ashi close
         pr_haopen,                                                   // Heiken ashi open
         pr_hahigh,                                                   // Heiken ashi high
         pr_halow,                                                    // Heiken ashi low
         pr_hamedian,                                                 // Heiken ashi median
         pr_hatypical,                                                // Heiken ashi typical
         pr_haweighted,                                               // Heiken ashi weighted
         pr_haaverage,                                                // Heiken ashi average
         pr_hamedianb,                                                // Heiken ashi median body
         pr_hatbiased,                                                // Heiken ashi trend biased price
         pr_hatbiased2,                                               // Heiken ashi trend biased (extreme) price
         pr_habclose,                                                 // Heiken ashi (better formula) close
         pr_habopen,                                                  // Heiken ashi (better formula) open
         pr_habhigh,                                                  // Heiken ashi (better formula) high
         pr_hablow,                                                   // Heiken ashi (better formula) low
         pr_habmedian,                                                // Heiken ashi (better formula) median
         pr_habtypical,                                               // Heiken ashi (better formula) typical
         pr_habweighted,                                              // Heiken ashi (better formula) weighted
         pr_habaverage,                                               // Heiken ashi (better formula) average
         pr_habmedianb,                                               // Heiken ashi (better formula) median body
         pr_habtbiased,                                               // Heiken ashi (better formula) trend biased price
         pr_habtbiased2                                               // Heiken ashi (better formula) trend biased (extreme) price
      };
input enPrices        inpMaPrice    = pr_habmedianb;                  // Ma price
enum  enMaTypes
      {
         ma_adxvma,                                                   // Adxvma
         ma_ahr,                                                      // Ahrens moving average
         ma_alxma,                                                    // Alexander moving average - ALXMA
         ma_dema,                                                     // Double exponential moving average - DEMA
         ma_dsema,                                                    // Double smoothed exponential moving average - DSEMA
         ma_emas,                                                     // Ema derivative - EMAD
         ma_ema,                                                      // Exponential moving average - EMA
         ma_fema,                                                     // Fast exponential moving average - FEMA
         ma_frama,                                                    // Fractal adaptive moving average - FRAMA
         ma_hull,                                                     // Hull moving average - HMA
         ma_ie2,                                                      // IE/2
         ma_ilinr,                                                    // Integral of linear regression slope
         ma_itl,                                                      // Instantaneous trendline
         ma_lagg,                                                     // Laguerre filter
         ma_lead,                                                     // Leader exponential moving average
         ma_linr,                                                     // Linear regression value - LSMA
         ma_slwma,                                                    // Smoothed linear weighted moving average - SLWMA
         ma_lwma,                                                     // Linear weighted moving average - LWMA
         ma_mcg,                                                      // McGinley Dynamic
         ma_mcma,                                                     // McNicholl ema
         ma_nlma,                                                     // Non lag moving average
         ma_pwma,                                                     // Parabolic weighted moving average - PWMA
         ma_rmta,                                                     // Recursive moving trendline - RMTA
         ma_sma,                                                      // Simple moving average - SMA
         ma_sid,                                                      // Simple decycler - SDEC
         ma_sine,                                                     // Sine weighted moving average
         ma_smma,                                                     // Smoothed moving average - SMMA
         ma_smoo,                                                     // Smoother
         ma_ssm,                                                      // Super smoother
         ma_b3p,                                                      // Three pole Ehlers Butterworth
         ma_s3p,                                                      // Three pole Ehlers smoother
         ma_tma,                                                      // Triangular moving average - TMA
         ma_tema,                                                     // Triple exponential moving average - TEMA
         ma_b2p,                                                      // Two pole Ehlers Butterworth
         ma_s2p,                                                      // Two pole Ehlers smoother
         ma_vema,                                                     // Volume weighted ema - VEMA
         ma_vwma,                                                     // Volume weighted moving average - VWMA
         ma_zldema,                                                   // Zero lag dema
         ma_zlma,                                                     // Zero lag moving average
         ma_zltema                                                    // Zero lag tema
      };
input enMaTypes       inpMaMethod     = ma_sma;                       // Moving average type
input double          multiplier      = 4.0;                          // Super trend multiplier
enum  enCalcType
      {
         st_atr,                                                      // Use atr
         st_std,                                                      // Use standard deviation 
         st_ema,                                                      // Use ema deviation 
         st_asd,                                                      // Use adaptive standard deviation 
         st_ste,                                                      // Use standard error
         st_sam,                                                      // Custom standard deviation - with sample correction
         st_nos                                                       // Custom standard deviation - without sample correction 
      };
input enCalcType       Type            = st_atr;                     // Calculate using?
extern string          dummy3          = "";                         // 
extern int             MagicNumber     = 123456;                     // Magic number to use for the EA
extern bool            EcnBroker       = true;                       // Is your broker ECN/STP type of broker?
extern bool            MulOnSame       = false;                      // Allow multiple opened and closed orders on a same bar?


extern string          dummy4           = "";                        // General settings
extern bool            DisplayInfo      = true;                      // Dislay info
extern int             Slippage         = 5;                         // Slipage to use when opening new orders
extern int             BarToUse         = 1;                         // Bar to test (0, for still opened, 1 for first closed, and so on)

bool dummyResult;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//

int init()   { return(0); }
int deinit() { return(0); }

//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
 double MM_Size() //Calculate position sizing
  {
   double lots = ((AccountEquity() / 15000)*LotsPer15K); //calculate the lot size according to how many lots input per 15K in "LotsPer15K"
   if(lots > MaxLot) lots = MaxLot;  //if greater than max set it to the maxlot size
   return(lots);
  }

//
//
//
//
#define _doNothing 0
#define _doBuy     1
#define _doSell    2
int start()
{
   int doWhat = _doNothing;
      double supertrend_trend_current  = iCustom(NULL,0,"!SuperTrend - averages new format (mtf + arrows + alerts + candles)",PERIOD_CURRENT,0,periods,inpMaPeriod,inpMaPrice,inpMaMethod,multiplier,Type,16,BarToUse);
      double supertrend_trend_previous = iCustom(NULL,0,"!SuperTrend - averages new format (mtf + arrows + alerts + candles)",PERIOD_CURRENT,0,periods,inpMaPeriod,inpMaPrice,inpMaMethod,multiplier,Type,16,BarToUse+1);
     
     if (supertrend_trend_current!=supertrend_trend_previous)
         if (supertrend_trend_current==1)
               doWhat = _doBuy;
         else  doWhat = _doSell;
         if (doWhat==_doNothing && !DisplayInfo) return(0);
         
   //
   //
   //
   //
   //
   
   int    openedBuys    = 0;
   int    openedSells   = 0;
   double currentProfit = 0;
  
   
   
   
   
   for (int i = OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderSymbol()      != Symbol())            continue;
      if (OrderMagicNumber() != MagicNumber)         continue;

      //
      //
      //
      //
      //
      
      if (DisplayInfo) currentProfit += OrderProfit()+OrderCommission()+OrderSwap();
         
         //
         //
         //
         //
         //
         
         if (OrderType()==OP_BUY)
            if (doWhat==_doSell)
                  { RefreshRates(); if (!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,CLR_NONE)) openedBuys++; }
            else  openedBuys++;
         if (OrderType()==OP_SELL)
            if (doWhat==_doBuy)
                  { RefreshRates(); if (!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,CLR_NONE)) openedSells++; }
            else  openedSells++;            
   }
   if (DisplayInfo) Comment("Current profit : "+DoubleToStr(currentProfit,2)+" "+AccountCurrency()); if (doWhat==_doNothing) return(0);

   //
   //
   //
   //
   //

   if (doWhat==_doBuy && openedBuys==0)
      {
         RefreshRates();
         double stopLossBuy   = 0; if (StopLoss>0)   stopLossBuy   = Ask-StopLoss*Point*MathPow(10,Digits%2);
         double takeProfitBuy = 0; if (TakeProfit>0) takeProfitBuy = Ask+TakeProfit*Point*MathPow(10,Digits%2);
         if (EcnBroker)
         {
            int ticketb = OrderSend(Symbol(),OP_BUY, MM_Size(),Ask,Slippage,0,0,"",MagicNumber,0,CLR_NONE);
            if (ticketb>-1)
              dummyResult = OrderModify(ticketb,OrderOpenPrice(),stopLossBuy,takeProfitBuy,0,CLR_NONE);
         }
         else dummyResult = OrderSend(Symbol(),OP_BUY, MM_Size(),Ask,Slippage,stopLossBuy,takeProfitBuy,"",MagicNumber,0,CLR_NONE);
      }
   if (doWhat==_doSell && openedSells==0)
      {
         RefreshRates();
         double stopLossSell   = 0; if (StopLoss>0)   stopLossSell   = Bid+StopLoss*Point*MathPow(10,Digits%2);
         double takeProfitSell = 0; if (TakeProfit>0) takeProfitSell = Bid-TakeProfit*Point*MathPow(10,Digits%2);
         if (EcnBroker)
         {
            int tickets = OrderSend(Symbol(),OP_SELL, MM_Size(),Bid,Slippage,0,0,"",MagicNumber,0,CLR_NONE);
            if (tickets>-1)
              dummyResult = OrderModify(tickets,OrderOpenPrice(),stopLossSell,takeProfitSell,0,CLR_NONE);
         }
         else dummyResult = OrderSend(Symbol(),OP_SELL, MM_Size(),Bid,Slippage,stopLossSell,takeProfitSell,"",MagicNumber,0,CLR_NONE);
      }
   return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------