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 ....
绘图线(15)/价格/颜色/宽度/样式 我自己写的
你好,请帮我完成这个,只需添加一个删除以前的线和代码,使程序在最初应用于图表时只运行一次,如果打开并改变,如...价格颜色样式等。谢谢你,我也要把这个脚本贴出来,虽然我认为这个脚本工作得很好,但我也感谢那些能帮助我复制这个脚本的人,希望它能为那些需要它或需要改变它以适应他们的需要的人工作,我希望我的交易员朋友能从我的第一个指标中受益,这个指标是我在学习了如何写它的风格后亲自写的。再次感谢。
plot_lines.mq4
plot_lines_1.mq4
你好。
谁能修改这个指标(MT_breakout.mq4),使其在新的tick上不删除线?谢谢你。
(指标在这个帖子里:https://www.mql5.com/en/forum/172989/page3)
x点距离的价格水平
我也一直在寻找一个指标,从一个参考价格画几条线到x点的距离水平,但我一直没有找到。所以我在上面发布的 "Plot Lines "基础上做了一个指标。
你可以选择向上或向下的7个级别,并选择你想要绘制的线的距离。这个距离是以参考价格的点数计算的。
设置了4个默认水平:30、70、100和130点。
如果你使用以点为单位的固定利润水平,应该有助于看到获利。
我希望它能有所帮助。谢谢。
亲爱的空气探索。
我应该感谢你分享你的x Pips指标。我刚刚把它拖到MT4图表中,但它没有出来,我没有看到任何线条出现,它有什么问题。请告诉我这个问题。
谢谢你
你好。
你能告诉我如何画出这样的水平线 吗? 通常情况下,孔图中的水平线是从左到右画的。我想要的是,它将从一个指定的价格画出一条实线,并在触及同一价格水平时结束。然后再画一条相同长度的点线。例如:在1.2324价格处画出品红色实线,价格下降。在价格回升并达到该水平后,品红实线必须结束。例如,这条品红色实心线有100根蜡烛,所以白色点线必须在接下来的100根蜡烛的同一水平上绘制。
请帮助我做这个,或者给我一个如何做这个的例子的链接。
谢谢
你好。
你能告诉我如何制作这样的水平线吗? 通常情况下,孔图中的水平线是从左到右画的。我想要的是,它将从一个指定的价格画出一条实线,并在触及同一价格水平时结束。然后再画一条相同长度的点线。例如:在1.2324价格处画出品红色实线,价格下降。在价格回升并达到该水平后,品红实线必须结束。例如,这条品红色实心线有100根蜡烛,所以白色点线必须在接下来的100根蜡烛的同一水平上绘制。
请帮助我做这个,或者给我如何做这个的例子链接。
谢谢你使用OBJECT_TRENDLINE来代替OBJECT_HLINE,你就可以做到了。
用OBJECT_TRENDLINE来代替OBJECT_HLINE,你就可以做到了
嗨,mladen。
非常感谢你。我可以用下面的代码画一条水平线。
//| 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);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
你能不能给点建议....?
谢谢
对不起。
最后的代码有一些错误。这个才是正确的。
//+------------------------------------------------------------------+
//| 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);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
嗨,姆拉登。
非常感谢你。我明白了,现在好多了(虽然还有很多事情要做....,但我现在很高兴了.... )
*)非常简单的一个。
//+------------------------------------------------------------------+
//| 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);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
嗨,Mladen。
非常感谢你。我知道了,现在好多了(虽然还有很多事情要做....,但我现在很高兴.... )。
*)非常简单的一个。
//+------------------------------------------------------------------+
//| 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);
//~~~~~~~~~~
}
//+------------------------------------------------------------------+
好的 快乐的进一步编码和交易