How to draw something in future time coordinate? (plot shift for EA)

 

Hi,

I have coded an EA that is guessing future trend. I would need to draw that future trend on the chart by displaying a zig zag line shifted to the right of the chart.

From that post, the guy is asking about "How to draw something in future time coordinate ?" for indicators. I can see that it is easily possible by using PLOT_SHIFT like for Alligator indicator.

But for EA, is there a way to do it without calling an indicator to draw the line?

Thanks,

How to draw something in future time coordinate ?
How to draw something in future time coordinate ?
  • 2010.03.13
  • www.mql5.com
How to draw something in future time coordinate ?
 
  1. EAs have no eyes. They don't need anything drawn on the chart.
  2. ZigZag is  repainting indicator (what you see now is not what you did earlier.) Not good for trading.
 
whroeder1:
  1. EAs have no eyes. They don't need anything drawn on the chart.
  2. ZigZag is  repainting indicator (what you see now is not what you did earlier.) Not good for trading.

1. True, but we need to control that it is acting well. We can still create line, right? Using ObjectCreate.

2. Zigzag is just the type of line I wanted, not mentioning the indicator.


Do these points means it is not possible to draw something in the future/shifted?

 
Odyssee Tremoulis:

1. True, but we need to control that it is acting well. We can still create line, right? Using ObjectCreate.

2. Zigzag is just the type of line I wanted, not mentioning the indicator.


Do these points means it is not possible to draw something in the future/shifted?

It's possible to use objects (trend line) but you will have to keep your anchor points in present/past.
 
whroeder1:
  1. EAs have no eyes. They don't need anything drawn on the chart.
  2. ZigZag is  repainting indicator (what you see now is not what you did earlier.) Not good for trading.

You're not using zigzag right if that's what you think. 

 
Odyssee Tremoulis:

Hi,

I have coded an EA that is guessing future trend. I would need to draw that future trend on the chart by displaying a zig zag line shifted to the right of the chart.

From that post, the guy is asking about "How to draw something in future time coordinate ?" for indicators. I can see that it is easily possible by using PLOT_SHIFT like for Alligator indicator.

But for EA, is there a way to do it without calling an indicator to draw the line?

Thanks,

It's pretty easy. Here's an example.
//+------------------------------------------------------------------+
//|                                               ZigZagRayRight.mq4 |
//|                                                      nicholishen |
//|                            http://www.reddit.com/u/nicholishenFX |
//+------------------------------------------------------------------+
#property copyright "nicholishen"
#property link      "http://www.reddit.com/u/nicholishenFX"
#property version   "1.00"
#property strict

#include <ChartObjects\ChartObjectsLines.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
//---
   struct ZP{double price;datetime time;}zz[2]={0};
   for(int i=0,cnt=0;i<Bars&&cnt<2;i++)
   {
      double zig = iCustom(_Symbol,_Period,"ZigZag",50,5,3,0,i);
      if(zig > 0.0 && zig != EMPTY_VALUE)
      {
         zz[cnt].price = zig;
         zz[cnt].time = iTime(_Symbol,_Period,i);
         cnt++;
      }
   }
   CChartObjectTrend line;
   line.Create(0,"__zz_ray_right__",0,zz[1].time,zz[1].price,zz[0].time,zz[0].price);
   line.Detach();
}
//+------------------------------------------------------------------+
 
nicholishen:
It's pretty easy. Here's an example.
Thanks nicholischen, will try that.
 
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
input double Future_Price=1.18;//future price [projected]
input int Bars_Duration=125;//duration in bars (from last known ZZ to projected[future] ZZ)
input bool use_time_duration=false;//use time duration instead of bars ?
input int time_duration=600;//time duration in minutes

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
double zz_price[3];
datetime zz_time[3];
int OnInit()
  {
//--- create timer
  // EventSetTimer(60);
  //find 2 latest valid zigzag points (it repaints though)
   int fill=2;
   double zz_value;
   for(int x=1;x<Bars;x++)
   {
   zz_value=iCustom(Symbol(),Period(),"ZigZag",50,5,3,0,x);
   //if zigzag exists
   if(zz_value>0&&zz_value!=EMPTY_VALUE)
     {
     //decrease counter
     fill--;
     zz_price[fill]=zz_value;
     zz_time[fill]=Time[x];
     //if we got 2 values bounce
     if(fill==0) break;
     }
   //if zigzag exists ends here 
   }
   //projection(3rd zz value you provide)
   zz_price[2]=NormalizeDouble(Future_Price,Digits());
   //if we use bars duration for the projection
     if(use_time_duration==false)
     {
     zz_time[2]=zz_time[1]+PeriodSeconds()*Bars_Duration;//in seconds ,to match the timestamp  
     }
   //if we use time duration
     if(use_time_duration==true)
     {
     zz_time[2]=zz_time[1]+time_duration*60;//conversion to seconds , to match the timestamp 
     }
   //draw 
     string objna;
     bool obji;
     objna="NORMAL_ZZ";
     ObjectDelete(0,objna);
     obji=ObjectCreate(0,objna,OBJ_TREND,0,zz_time[0],zz_price[0],zz_time[1],zz_price[1]);
     ObjectSetInteger(0,objna,OBJPROP_RAY_RIGHT,false);
     ObjectSetInteger(0,objna,OBJPROP_RAY,false);
     
     objna="PROJECTED_ZZ";
     ObjectDelete(0,objna);
     obji=ObjectCreate(0,objna,OBJ_TREND,0,zz_time[1],zz_price[1],zz_time[2],zz_price[2]);
     ObjectSetInteger(0,objna,OBJPROP_RAY_RIGHT,false);
     ObjectSetInteger(0,objna,OBJPROP_RAY,false);     
     ObjectSetInteger(0,objna,OBJPROP_TIME2,zz_time[2]);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   //EventKillTimer();
      
  }

I guess by zigzag you mean the plotting method instead of the indicator .