st_ind_2_v1

Download script
Author: Ron T
st_ind_2_v1

This tool is designed as a visual aid for traders to help identify momentum shifts and manage active positions on a 5-minute chart. It works by analyzing price movements in relation to a Moving Average (MA) and cross-referencing that data with your current open trades.

Here is a breakdown of the logic used by the script:

Trend Identification

The core of the indicator relies on a Linear Weighted Moving Average. It constantly monitors whether the current moving average value is increasing or decreasing compared to the previous price point:

  • Rising Momentum: When the average is trending upward, the script identifies a "rising" state and marks the high of the candle with a small dot.
  • Falling Momentum: When the average is trending downward, the script identifies a "falling" state and marks the low of the candle with a small dot.

Active Trade Tracking

The script scans your current account to see if you have any open positions for the specific currency pair or asset you are currently viewing. It distinguishes between "Bought" (Long) positions and "Sold" (Short) positions.

If an active trade is detected, it places a Large Dot on the chart (at the high for buys and the low for sells). This serves as a constant visual reminder that a position is currently "in progress," making it easier to track your active exposure at a glance.

Exit & Reversal Signals

The most unique feature of this script is how it interacts with your existing open trades to highlight potential conflicts or reversal points:

  • Sell Signals for Buy Positions: If you have an open "Buy" trade but the moving average starts trending downward (falling), the script places a Down Arrow at the high of the candle. This alerts you that the momentum is shifting against your current position.
  • Buy Signals for Sell Positions: If you have an open "Sell" trade but the moving average starts trending upward (rising), the script places an Up Arrow at the low of the candle. This alerts you that the price action may be turning in favor of a reversal.

Summary for the User

Essentially, this tool automates the "monitoring" phase of trading. It provides:

  1. Trend Awareness: Small dots to show the general direction of the market.
  2. Status Awareness: Large dots to confirm your current active trades.
  3. Risk Alerts: Specific arrows that appear only when the market momentum contradicts your current open trade, signaling a potential time to review your position or take profits.
Orders Execution
Checks for the total of open orders
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
st_ind_2_v1
//+------------------------------------------------------------------+
//| 5 Min RSI 12-period qual INDICATOR                               |
//+------------------------------------------------------------------+
#property copyright "Ron T"
#property link      "http://www.lightpatch.com"

#property indicator_chart_window
#property indicator_buffers 6

#property indicator_color1 White
#property indicator_color2 Red
#property indicator_color3 White
#property indicator_color4 Red
#property indicator_color5 White
#property indicator_color6 Red


//---- buffers
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];

// User Input
extern double MovingAvg=10;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|

int init()
  {

   // 233 up arrow
   // 234 down arrow
   // 159 big dot
   // 158 little dot
   // 168 open square
   // 120 box with X
   
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexBuffer(0, Buffer1);
   SetIndexArrow(0,159);  //big dot
   
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexBuffer(1, Buffer2);
   SetIndexArrow(1,159);  //big dot

   SetIndexStyle(2,DRAW_ARROW);
   SetIndexBuffer(2, Buffer3);
   SetIndexArrow(2,158);  //little dot
   
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexBuffer(3, Buffer4);
   SetIndexArrow(3,158);  //little dot

   SetIndexStyle(4,DRAW_ARROW);
   SetIndexBuffer(4, Buffer5);
   SetIndexArrow(4,233);  //arrow
   
   SetIndexStyle(5,DRAW_ARROW);
   SetIndexBuffer(5, Buffer6);
   SetIndexArrow(5,234);  //arrow

   return(0);
  }


//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   int i;
   
   for( i=0; i<Bars; i++ ) Buffer1[i]=0;
   for( i=0; i<Bars; i++ ) Buffer2[i]=0;
   for( i=0; i<Bars; i++ ) Buffer3[i]=0;
   for( i=0; i<Bars; i++ ) Buffer4[i]=0;
   for( i=0; i<Bars; i++ ) Buffer5[i]=0;
   for( i=0; i<Bars; i++ ) Buffer6[i]=0;

   return(0);
  }


//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {
   int      pos=Bars-100; // leave room for moving average periods

   double   cMA=0, pMA=0;

   bool     found=false;
   bool    rising=false;
   bool   falling=false;
   bool    bought=false;
   bool      sold=false;
   
   int      cnt=0;
   int      err=0;
   
   while(pos>=0)
     {

      // get 1 & 2 MA (avoid 0, as it's too noisy)
      // (possible mod - open of 0 and 1 has no noise)
      cMA=iMA(Symbol(), 0, MovingAvg, 0, MODE_LWMA, PRICE_CLOSE, pos);
      pMA=iMA(Symbol(), 0, MovingAvg, 0, MODE_LWMA, PRICE_CLOSE, pos+1);

      if (pMA<=cMA) {rising=true;  falling=false; Buffer3[pos]=High[pos];}
      if (pMA>=cMA) {rising=false; falling=true;  Buffer4[pos]=Low[pos];}

      // Does the Symbol() have an open order
      for(cnt=0;cnt<OrdersTotal();cnt++)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol()==Symbol())
           {
            // if found, get all the trailing stoploss data
            // from bar 1 not 0
            found=true;
            if (OrderType()==0) {bought=true;  sold=false;}
            if (OrderType()==1) {bought=false; sold=true;}
            break;
           }
            else
           {
            found=false;
          }        
        }
   

      // Draw a big dot if there
      // is an order open so user
      // can tell it's in progress
      if (found && bought)
        {
         Buffer1[pos]=High[pos];
         return(0);
        }

      if (found && sold)
        {
         Buffer2[pos]=Low[pos];
         return(0);
        }


      if (rising && sold)       //existing sell
        {
         Buffer6[pos]=Low[pos];
        }
      if (falling && bought)  // existing buy
        {
         Buffer5[pos]=High[pos];
        }

      pos--;
   }

   return(0);
  }
//+------------------------------------------------------------------+

Comments