You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Plot Lines(15)/price/Color/Width/Style I wrote this myself
Hi please help me complete this and by only adding a delete for line previouly made and code to make the program only run once when aorginaly applied to the chart and if opened and changed, ie...price color style etc... thank you and i am also posting the script although i think the script works just fine but also I thank whom ever can help me coplet this and hope it works for whome ever needs it or needs to change it to fit there needs, I hope my fellow traders can benefit from my very first indicator that I personally wrote after learnign how to write it from my style of learning. Thanks again.
plot_lines.mq4
plot_lines_1.mq4
Hello,
Can anyone modify this indicator (MT_breakout.mq4) so that it doesn't delete the line on new tick ? Thank you.
(Indicator is on this post : https://www.mql5.com/en/forum/172989/page3)
x Pips Distances Price Levels
I've also been looking for an indicator that draws several lines to x pips distance level from a reference price, but I haven't been able to find any. So I've made an indicator based on "Plot Lines" posted above.
You can choose 7 levels up or down and select the distance you want the line to be plotted. The distance is calculated in points from the reference price.
4 default levels are set : 30, 70, 100 and 130 pips.
It should help to see take profits if you use fixed profits levels in pips.
I hope it will help. Cheers.
Dear Air quest,
I should thank you for sharing your x Pips indicator. I have just dragged it into mt4 chart but it does not come out, i do not see any line appear, what is wrong with it. Please kindly advise me about it.
Thanks & regards
Hi,
Can you show me how to make the horizontal line like this ? Normally a horizontal line is drawn in the hole charts, from left to right. What i want is, it will draw a solid line from a specify price, and will end it the same price level is touch. Then it will draw another dot line for the same length. Example: the solid magenta line is drawn at price 1.2324 , the price goes down. After the price goes back up and reach that level, the solid magenta line must end. This solid magenta line has 100 candles for example, so the white dot line must be drawn at the same level for the next 100 candles.
Please help me to make it, or give me link of example how to make this.
Thanks
Hi,
Can you show me how to make the horizontal line like this ? Normally a horizontal line is drawn in the hole charts, from left to right. What i want is, it will draw a solid line from a specify price, and will end it the same price level is touch. Then it will draw another dot line for the same length. Example: the solid magenta line is drawn at price 1.2324 , the price goes down. After the price goes back up and reach that level, the solid magenta line must end. This solid magenta line has 100 candles for example, so the white dot line must be drawn at the same level for the next 100 candles.
Please help me to make it, or give me link of example how to make this.
ThanksUse OBJECT_TRENDLINE for that instead of OBJECT_HLINE and you will be able to do it
Use OBJECT_TRENDLINE for that instead of OBJECT_HLINE and you will be able to do it
Hi mladen,
Thank you very much. I can draw a horizontal line using the code below :
//| myHorizontalLine.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| MetaTrader 5 Trading Platform / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int getClosePrcOfCandleNr = 8;
extern color lineColor = Lime;
extern int lineWidth = 2;
extern int lineBeginOfCandleNr = 40;
extern int lineEndOfCandleNr = 1;
string label = "_myHorLine_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(label);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
Trend_Line(Time[lineBeginOfCandleNr],Time[lineEndOfCandleNr],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColor,STYLE_SOLID,lineWidth);
return(0);
}
//+------------------------------------------------------------------+
void Trend_Line(
datetime x1, datetime x2, double y1,
double y2, color lineColor, int lineStyle, int lineWidth)
{
//~~~~~~~~~~
ObjectDelete(label);
ObjectCreate(label, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(label, OBJPROP_RAY, 0);
ObjectSet(label, OBJPROP_COLOR, lineColor);
ObjectSet(label, OBJPROP_STYLE, lineStyle);
ObjectSet(label, OBJPROP_WIDTH, lineWidth);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
[/PHP]
This line is still moving / redraw every new candle appear (see picture).
It's still not what i need. For example: I want to get the TIME and PRICE the EMA3 cross EMA21 at TimeFrame H1. At that point, I will draw a line. This line must end if the price goes back to the same price level. But i must can see the line from smaller timeframe like M1, M5, M15, M30 (not only on H1).
I tried to make it like this, but i did not get any line ....
[PHP]
//+------------------------------------------------------------------+
//| myHorizontalLine2.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int smallEMAperiod = 3;
extern int bigEMAperiod = 21;
extern color lineColorUp = Lime;
extern int lineWidthUp = 2;
extern color lineColorDn = Red;
extern int lineWidthDn = 2;
//---
double getUpPrice=0, getDnPrice=0, prcBefore=0, prcAfter=0;
datetime getUpTime=0, endUpTime=0, getDnTime=0, endDnTime=0;
bool goingUp=false, goingDown=false;
string upLabel = "_myHorLineUp_";
string dnLabel = "_myHorLineDn_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(upLabel);
ObjectDelete(dnLabel);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
int limit,i;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---
for(i=0; i<limit; i++) {
double prevSmallEMA = iMA(NULL,60,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curSmallEMA = iMA(NULL,60,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
double prevBigEMA = iMA(NULL,60,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curBigEMA = iMA(NULL,60,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
if ((prevSmallEMA curBigEMA)) { // going up
getUpPrice = iClose(NULL,60,i);
getUpTime = Time;
goingUp = true;
goingDown = false;
}
else if ((prevSmallEMA >= prevBigEMA)&&(curSmallEMA < curBigEMA)) { // going down
getDnPrice = iClose(NULL,60,i);
getDnTime = Time;
goingDown = true;
goingUp = false;
}
}
//---
if (goingUp == true) {
for(i=0; i<limit; i++) {
prcBefore = iClose(NULL,60,i+1);
prcAfter = iClose(NULL,60,i);
if ((prcBefore >= getUpPrice)&&(prcAfter < 0)) {
endUpTime = Time;
}
else {
endUpTime = 0;
}
}
if (endUpTime != 0) {
Trend_LineUp(getUpTime,endUpTime,getUpPrice,getUpPrice,lineColorUp,STYLE_SOLID,lineWidthUp);
}
}
//---
if (goingDown == true) {
for(i=0; i<limit; i++) {
prcBefore = iClose(NULL,60,i+1);
prcAfter = iClose(NULL,60,i);
if ((prcBefore 0)) {
endDnTime = Time;
}
else {
endDnTime = 0;
}
}
if (endDnTime != 0) {
Trend_LineDn(getDnTime,endDnTime,getDnPrice,getDnPrice,lineColorDn,STYLE_SOLID,lineWidthDn);
}
}
//---
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineUp(
datetime x1, datetime x2, double y1,
double y2, color lineColor, int lineStyle, int lineWidth)
{
//~~~~~~~~~~
ObjectDelete(upLabel);
ObjectCreate(upLabel, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(upLabel, OBJPROP_RAY, 0);
ObjectSet(upLabel, OBJPROP_COLOR, lineColor);
ObjectSet(upLabel, OBJPROP_STYLE, lineStyle);
ObjectSet(upLabel, OBJPROP_WIDTH, lineWidth);
//~~~~~~~~~~
}
void Trend_LineDn(
datetime x1, datetime x2, double y1,
double y2, color lineColor, int lineStyle, int lineWidth)
{
//~~~~~~~~~~
ObjectDelete(dnLabel);
ObjectCreate(dnLabel, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(dnLabel, OBJPROP_RAY, 0);
ObjectSet(dnLabel, OBJPROP_COLOR, lineColor);
ObjectSet(dnLabel, OBJPROP_STYLE, lineStyle);
ObjectSet(dnLabel, OBJPROP_WIDTH, lineWidth);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
Can you please give any idea ....??
Thanks
Sorry,
The there are some typo on last code. This one is the right one :
//+------------------------------------------------------------------+
//| myHorizontalLine2.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int smallEMAperiod = 3;
extern int bigEMAperiod = 21;
extern color lineColorUp = Lime;
extern int lineWidthUp = 2;
extern color lineColorDn = Red;
extern int lineWidthDn = 2;
//---
double getUpPrice=0, getDnPrice=0, prcBefore=0, prcAfter=0;
datetime getUpTime=0, endUpTime=0, getDnTime=0, endDnTime=0;
bool goingUp=false, goingDown=false;
string upLabel = "_myHorLineUp_";
string dnLabel = "_myHorLineDn_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(upLabel);
ObjectDelete(dnLabel);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
int limit,i;
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---
for(i=0; i<limit; i++) {
double prevSmallEMA = iMA(NULL,60,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curSmallEMA = iMA(NULL,60,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
double prevBigEMA = iMA(NULL,60,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curBigEMA = iMA(NULL,60,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
if ((prevSmallEMA curBigEMA)) { // going up
getUpPrice = iClose(NULL,60,i);
getUpTime = Time;
goingUp = true;
goingDown = false;
}
else if ((prevSmallEMA >= prevBigEMA)&&(curSmallEMA < curBigEMA)) { // going down
getDnPrice = iClose(NULL,60,i);
getDnTime = Time;
goingDown = true;
goingUp = false;
}
}
//---
if (goingUp == true) {
for(i=0; i<limit; i++) {
prcBefore = iClose(NULL,60,i+1);
prcAfter = iClose(NULL,60,i);
if ((prcBefore >= getUpPrice)&&(prcAfter < getUpPrice)) {
endUpTime = Time;
}
else {
endUpTime = 0;
}
}
if (endUpTime != 0) {
Trend_LineUp(getUpTime,endUpTime,getUpPrice,getUpPrice,lineColorUp,STYLE_SOLID,lineWidthUp);
}
}
//---
if (goingDown == true) {
for(i=0; i<limit; i++) {
prcBefore = iClose(NULL,60,i+1);
prcAfter = iClose(NULL,60,i);
if ((prcBefore getDnPrice)) {
endDnTime = Time;
}
else {
endDnTime = 0;
}
}
if (endDnTime != 0) {
Trend_LineDn(getDnTime,endDnTime,getDnPrice,getDnPrice,lineColorDn,STYLE_SOLID,lineWidthDn);
}
}
//---
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineUp(
datetime x1, datetime x2, double y1,
double y2, color lineColor, int lineStyle, int lineWidth)
{
//~~~~~~~~~~
ObjectDelete(upLabel);
ObjectCreate(upLabel, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(upLabel, OBJPROP_RAY, 0);
ObjectSet(upLabel, OBJPROP_COLOR, lineColor);
ObjectSet(upLabel, OBJPROP_STYLE, lineStyle);
ObjectSet(upLabel, OBJPROP_WIDTH, lineWidth);
//~~~~~~~~~~
}
void Trend_LineDn(
datetime x1, datetime x2, double y1,
double y2, color lineColor, int lineStyle, int lineWidth)
{
//~~~~~~~~~~
ObjectDelete(dnLabel);
ObjectCreate(dnLabel, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(dnLabel, OBJPROP_RAY, 0);
ObjectSet(dnLabel, OBJPROP_COLOR, lineColor);
ObjectSet(dnLabel, OBJPROP_STYLE, lineStyle);
ObjectSet(dnLabel, OBJPROP_WIDTH, lineWidth);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
Hi Mladen,
Thank you very much. I got it, it's better now (although it still has much to do .... but i'm happy now .... )
*) the very simple one :
//+------------------------------------------------------------------+
//| myHorizontalLine1.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int getClosePrcOfCandleNr = 9;
extern color lineColorMain = Magenta;
extern int lineWidthMain = 2;
extern color lineColorNext = White;
int lineWidthNext = 1; // style dot muss max=1 width
extern int lineBeginOfCandleNr = 45;
extern int lineEndOfCandleNr = 21;
datetime curTimeStamp=0;
int beginOfDotLine, endOfDotLine;
string labelMain = "_HorLine5_";
string labelNext = "_HorLine5Next_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
curTimeStamp = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(labelMain);
ObjectDelete(labelNext);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
if (curTimeStamp != Time[0]) {
curTimeStamp = Time[0];
lineBeginOfCandleNr++;
lineEndOfCandleNr++;
getClosePrcOfCandleNr++;
beginOfDotLine = lineEndOfCandleNr;
int beginMainCandle = iBarShift(NULL,0,Time[lineBeginOfCandleNr]);
int endMainCandle = iBarShift(NULL,0,Time[lineEndOfCandleNr]);
endOfDotLine = beginOfDotLine - (beginMainCandle - endMainCandle);
}
Trend_LineMain(Time[lineBeginOfCandleNr],Time[lineEndOfCandleNr],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorMain,STYLE_SOLID,lineWidthMain);
if (endOfDotLine > 0) { // muss positive
Trend_LineNext(Time,Time[endOfDotLine],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorNext,STYLE_DOT,lineWidthNext);
}
else {
Trend_LineNext(Time,Time[1],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorNext,STYLE_DOT,lineWidthNext);
}
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineMain(
datetime x1, datetime x2, double y1,
double y2, color lineColorMain, int lineStyle, int lineWidthMain)
{
//~~~~~~~~~~
ObjectDelete(labelMain);
ObjectCreate(labelMain, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelMain, OBJPROP_RAY, 0);
ObjectSet(labelMain, OBJPROP_COLOR, lineColorMain);
ObjectSet(labelMain, OBJPROP_STYLE, lineStyle);
ObjectSet(labelMain, OBJPROP_WIDTH, lineWidthMain);
//~~~~~~~~~~
}
void Trend_LineNext(
datetime x1, datetime x2, double y1,
double y2, color lineColorNext, int lineStyle, int lineWidthNext)
{
//~~~~~~~~~~
ObjectDelete(labelNext);
ObjectCreate(labelNext, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelNext, OBJPROP_RAY, 0);
ObjectSet(labelNext, OBJPROP_COLOR, lineColorNext);
ObjectSet(labelNext, OBJPROP_STYLE, lineStyle);
ObjectSet(labelNext, OBJPROP_WIDTH, lineWidthNext);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
[/PHP]
And this is better ... :
[PHP]
//+------------------------------------------------------------------+
//| myHorizontalLine3.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int getClosePrcOfCandleNr = 9;
extern color lineColorMain = Magenta;
extern int lineWidthMain = 2;
extern color lineColorNext = White;
int lineWidthNext = 1; // style dot muss max=1 width
extern int smallEMAperiod = 30;
extern int bigEMAperiod = 150;
extern int bars_limit = 1000;
datetime curTimeStamp=0;
int beginOfDotLine, endOfDotLine;
double getUpPrice=0, getDnPrice=0, prcBefore=0, prcAfter=0;
datetime getUpTime=0, endUpTime=0, getDnTime=0, endDnTime=0;
bool goingUp=false, goingDown=false;
string labelMain = "_HorLine8_";
string labelNext = "_HorLine8Next_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
curTimeStamp = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(labelMain);
ObjectDelete(labelNext);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
int limit,i;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;
//---
for(i=limit; i>0; i--) { // decrement here ....
double prevSmallEMA = iMA(NULL,0,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curSmallEMA = iMA(NULL,0,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
double prevBigEMA = iMA(NULL,0,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curBigEMA = iMA(NULL,0,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
if ((prevSmallEMA curBigEMA)) { // going up
///// getUpPrice = iClose(NULL,0,i);
getUpPrice = (prevSmallEMA + curSmallEMA)/2;
getUpTime = Time;
goingUp = true;
goingDown = false;
int getUpCandle = iBarShift(NULL,0,getUpTime);
prcBefore = iClose(NULL,0,i+1);
prcAfter = iClose(NULL,0,i);
if ((prcBefore >= getUpPrice)&&(prcAfter < getUpPrice)) {
if (Time > getUpTime) {
endUpTime = Time;
int endUpCandle = iBarShift(NULL,0,endUpTime);
}
}
else {
endUpTime = Time[0];
endUpCandle = 0;
}
//---
if (curTimeStamp != Time[0]) {
curTimeStamp = Time[0];
getUpCandle++;
endUpCandle++;
beginOfDotLine = endUpCandle;
int beginMainCandle = iBarShift(NULL,0,Time[getUpCandle]);
int endMainCandle = iBarShift(NULL,0,Time[endUpCandle]);
endOfDotLine = beginOfDotLine - (beginMainCandle - endMainCandle);
}
Trend_LineMain(Time[getUpCandle],Time[endUpCandle],getUpPrice,getUpPrice,lineColorMain,STYLE_SOLID,lineWidthMain);
if (endOfDotLine > 0) { // muss positive
Trend_LineNext(Time,Time[endOfDotLine],getUpPrice,getUpPrice,lineColorNext,STYLE_DOT,lineWidthNext);
}
else {
Trend_LineNext(Time,Time[1],getUpPrice,getUpPrice,lineColorNext,STYLE_DOT,lineWidthNext);
}
//---
goingUp = false;
}
else if ((prevSmallEMA >= prevBigEMA)&&(curSmallEMA < curBigEMA)) { // going down
getDnPrice = iClose(NULL,0,i);
getDnTime = Time;
goingDown = true;
goingUp = false;
int getDnCandle = iBarShift(NULL,0,getDnTime);
//-- to do .....
goingDown = false;
}
} // ende for
//---
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineMain(
datetime x1, datetime x2, double y1,
double y2, color lineColorMain, int lineStyle, int lineWidthMain)
{
//~~~~~~~~~~
ObjectDelete(labelMain);
ObjectCreate(labelMain, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelMain, OBJPROP_RAY, 0);
ObjectSet(labelMain, OBJPROP_COLOR, lineColorMain);
ObjectSet(labelMain, OBJPROP_STYLE, lineStyle);
ObjectSet(labelMain, OBJPROP_WIDTH, lineWidthMain);
//~~~~~~~~~~
}
void Trend_LineNext(
datetime x1, datetime x2, double y1,
double y2, color lineColorNext, int lineStyle, int lineWidthNext)
{
//~~~~~~~~~~
ObjectDelete(labelNext);
ObjectCreate(labelNext, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelNext, OBJPROP_RAY, 0);
ObjectSet(labelNext, OBJPROP_COLOR, lineColorNext);
ObjectSet(labelNext, OBJPROP_STYLE, lineStyle);
ObjectSet(labelNext, OBJPROP_WIDTH, lineWidthNext);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
Hi Mladen,
Thank you very much. I got it, it's better now (although it still has much to do .... but i'm happy now .... )
*) the very simple one :
//+------------------------------------------------------------------+
//| myHorizontalLine1.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int getClosePrcOfCandleNr = 9;
extern color lineColorMain = Magenta;
extern int lineWidthMain = 2;
extern color lineColorNext = White;
int lineWidthNext = 1; // style dot muss max=1 width
extern int lineBeginOfCandleNr = 45;
extern int lineEndOfCandleNr = 21;
datetime curTimeStamp=0;
int beginOfDotLine, endOfDotLine;
string labelMain = "_HorLine5_";
string labelNext = "_HorLine5Next_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
curTimeStamp = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(labelMain);
ObjectDelete(labelNext);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
if (curTimeStamp != Time[0]) {
curTimeStamp = Time[0];
lineBeginOfCandleNr++;
lineEndOfCandleNr++;
getClosePrcOfCandleNr++;
beginOfDotLine = lineEndOfCandleNr;
int beginMainCandle = iBarShift(NULL,0,Time[lineBeginOfCandleNr]);
int endMainCandle = iBarShift(NULL,0,Time[lineEndOfCandleNr]);
endOfDotLine = beginOfDotLine - (beginMainCandle - endMainCandle);
}
Trend_LineMain(Time[lineBeginOfCandleNr],Time[lineEndOfCandleNr],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorMain,STYLE_SOLID,lineWidthMain);
if (endOfDotLine > 0) { // muss positive
Trend_LineNext(Time,Time[endOfDotLine],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorNext,STYLE_DOT,lineWidthNext);
}
else {
Trend_LineNext(Time,Time[1],Close[getClosePrcOfCandleNr],Close[getClosePrcOfCandleNr],lineColorNext,STYLE_DOT,lineWidthNext);
}
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineMain(
datetime x1, datetime x2, double y1,
double y2, color lineColorMain, int lineStyle, int lineWidthMain)
{
//~~~~~~~~~~
ObjectDelete(labelMain);
ObjectCreate(labelMain, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelMain, OBJPROP_RAY, 0);
ObjectSet(labelMain, OBJPROP_COLOR, lineColorMain);
ObjectSet(labelMain, OBJPROP_STYLE, lineStyle);
ObjectSet(labelMain, OBJPROP_WIDTH, lineWidthMain);
//~~~~~~~~~~
}
void Trend_LineNext(
datetime x1, datetime x2, double y1,
double y2, color lineColorNext, int lineStyle, int lineWidthNext)
{
//~~~~~~~~~~
ObjectDelete(labelNext);
ObjectCreate(labelNext, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelNext, OBJPROP_RAY, 0);
ObjectSet(labelNext, OBJPROP_COLOR, lineColorNext);
ObjectSet(labelNext, OBJPROP_STYLE, lineStyle);
ObjectSet(labelNext, OBJPROP_WIDTH, lineWidthNext);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
[/PHP]
And this is better ... :
[PHP]
//+------------------------------------------------------------------+
//| myHorizontalLine3.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property indicator_chart_window
extern int getClosePrcOfCandleNr = 9;
extern color lineColorMain = Magenta;
extern int lineWidthMain = 2;
extern color lineColorNext = White;
int lineWidthNext = 1; // style dot muss max=1 width
extern int smallEMAperiod = 30;
extern int bigEMAperiod = 150;
extern int bars_limit = 1000;
datetime curTimeStamp=0;
int beginOfDotLine, endOfDotLine;
double getUpPrice=0, getDnPrice=0, prcBefore=0, prcAfter=0;
datetime getUpTime=0, endUpTime=0, getDnTime=0, endDnTime=0;
bool goingUp=false, goingDown=false;
string labelMain = "_HorLine8_";
string labelNext = "_HorLine8Next_";
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
curTimeStamp = Time[0];
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
ObjectDelete(labelMain);
ObjectDelete(labelNext);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start(){
int limit,i;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
if (limit>bars_limit-1 && bars_limit!=0) limit=bars_limit-1;
//---
for(i=limit; i>0; i--) { // decrement here ....
double prevSmallEMA = iMA(NULL,0,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curSmallEMA = iMA(NULL,0,smallEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
double prevBigEMA = iMA(NULL,0,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i+1);
double curBigEMA = iMA(NULL,0,bigEMAperiod,0,MODE_EMA,PRICE_CLOSE,i);
if ((prevSmallEMA curBigEMA)) { // going up
///// getUpPrice = iClose(NULL,0,i);
getUpPrice = (prevSmallEMA + curSmallEMA)/2;
getUpTime = Time;
goingUp = true;
goingDown = false;
int getUpCandle = iBarShift(NULL,0,getUpTime);
prcBefore = iClose(NULL,0,i+1);
prcAfter = iClose(NULL,0,i);
if ((prcBefore >= getUpPrice)&&(prcAfter < getUpPrice)) {
if (Time > getUpTime) {
endUpTime = Time;
int endUpCandle = iBarShift(NULL,0,endUpTime);
}
}
else {
endUpTime = Time[0];
endUpCandle = 0;
}
//---
if (curTimeStamp != Time[0]) {
curTimeStamp = Time[0];
getUpCandle++;
endUpCandle++;
beginOfDotLine = endUpCandle;
int beginMainCandle = iBarShift(NULL,0,Time[getUpCandle]);
int endMainCandle = iBarShift(NULL,0,Time[endUpCandle]);
endOfDotLine = beginOfDotLine - (beginMainCandle - endMainCandle);
}
Trend_LineMain(Time[getUpCandle],Time[endUpCandle],getUpPrice,getUpPrice,lineColorMain,STYLE_SOLID,lineWidthMain);
if (endOfDotLine > 0) { // muss positive
Trend_LineNext(Time,Time[endOfDotLine],getUpPrice,getUpPrice,lineColorNext,STYLE_DOT,lineWidthNext);
}
else {
Trend_LineNext(Time,Time[1],getUpPrice,getUpPrice,lineColorNext,STYLE_DOT,lineWidthNext);
}
//---
goingUp = false;
}
else if ((prevSmallEMA >= prevBigEMA)&&(curSmallEMA < curBigEMA)) { // going down
getDnPrice = iClose(NULL,0,i);
getDnTime = Time;
goingDown = true;
goingUp = false;
int getDnCandle = iBarShift(NULL,0,getDnTime);
//-- to do .....
goingDown = false;
}
} // ende for
//---
return(0);
}
//+------------------------------------------------------------------+
void Trend_LineMain(
datetime x1, datetime x2, double y1,
double y2, color lineColorMain, int lineStyle, int lineWidthMain)
{
//~~~~~~~~~~
ObjectDelete(labelMain);
ObjectCreate(labelMain, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelMain, OBJPROP_RAY, 0);
ObjectSet(labelMain, OBJPROP_COLOR, lineColorMain);
ObjectSet(labelMain, OBJPROP_STYLE, lineStyle);
ObjectSet(labelMain, OBJPROP_WIDTH, lineWidthMain);
//~~~~~~~~~~
}
void Trend_LineNext(
datetime x1, datetime x2, double y1,
double y2, color lineColorNext, int lineStyle, int lineWidthNext)
{
//~~~~~~~~~~
ObjectDelete(labelNext);
ObjectCreate(labelNext, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
ObjectSet(labelNext, OBJPROP_RAY, 0);
ObjectSet(labelNext, OBJPROP_COLOR, lineColorNext);
ObjectSet(labelNext, OBJPROP_STYLE, lineStyle);
ObjectSet(labelNext, OBJPROP_WIDTH, lineWidthNext);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
Good Happy further coding and trading