[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 132

 
MK07:

技术更正--使用顶部面板上的SRC按钮来插入代码,就像你的顾问所做的那样。它将更容易阅读。

P.S.
要清除评论行,在deinit()中插入Comment(")。
 
granit77:
技术更正--使用顶部面板上的SRC按钮来插入代码,就像你的顾问所做的那样。它将更容易阅读。

P.S.
要清除注释行,在deinit()中插入Comment(")。
谢谢你提供的信息,这是我第一次来论坛,特别感谢你提供的代码片段。
 
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
double ExtMapBuffer1[],ExtMapBuffer2[];
int init(){SetIndexStyle(0,DRAW_LINE);SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE);SetIndexBuffer(1,ExtMapBuffer2);
IndicatorShortName("MACD_max-min");return(0);}
int deinit(){Comment("");return(0);}
//+------------------------------------------------------------------+
int start(){int counted_bars=IndicatorCounted(),limit,win_idx;double top;
if(counted_bars>0)counted_bars--;limit=Bars-counted_bars;win_idx=WindowFind("MACD_max-min");
for(int i=0;i<limit;i++){ExtMapBuffer1[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
  ExtMapBuffer2[i]=iMACD(0,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);}
  top=WindowPriceMax(win_idx);ObjectDelete("max");
  if(ObjectFind("max")!=win_idx){ObjectCreate("max",OBJ_HLINE,win_idx,Time[0],top);
  ObjectSet("max",OBJPROP_COLOR,Yellow);ObjectSet("max",OBJPROP_WIDTH,0);}
  Comment( "\n"," top = ",DoubleToStr(top,5));return(0);}
//+------------------------------------------------------------------+
 
https://docs.mql4.com/ru/common/Comment
空白注释(. ...)
该函数在图表的左上角打印一个用户定义的注释。参数可以是任何类型的。参数的数量不能超过64。
数组不能被传递给Comment()。数组必须一个元素一个元素地打印。
双重类型的数据在打印时,在点之后有4位小数。.要输出精度更高的数字,请使用DoubleToStr()
bool、datetime和color类型将被打印成数字。
要将日期时间数据输出为字符串,请使用TimeToStr() 函数。

为了将输出分成多行,您可以使用换行符"\n "或"\r\n"。
另见 Alert()Print()
 
你能告诉我如何写:
价格已经越过水平线 上升....
那么这条线路应该如何描述呢?
 
Roll:
谢谢你的科学。
 

你好。

我遇到的问题是这样的。

在PERIOD_H1上工作。

为了在一小时后结束,我这样做。

   for(j = OrdersTotal()-1; j >= 0; j--){ 
       if(OrderSelect(j, SELECT_BY_POS, MODE_TRADES))
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber){
            OpenTime= OrderOpenTime();          
          if(OrderType() == OP_BUY){
            if(TimeCurrent()>Time[0]+3580){ 
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),0,Red);}
             }
           else 
          if(OrderType() == OP_SELL){
            if(TimeCurrent()>Time[0]+3580){
             OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),0,Blue);}
             }
           }
         }
为了在一小时开始的时候开仓,我做了以下工作
   if(TimeCurrent()<Time[0]+3500 && HaveBuy==false && HaveSell==false)
     if(Ask <= EnBuy && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),0,0,forecast-5*MyPoint,"",MagicNumber,0,Blue);
         }
     if(Bid >= EnSel && IsFreeLevel==true){
          ticket = OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),0,0,forecast+5*MyPoint,"",MagicNumber,0,Red);
         }

但对于测试来说,它是这样的

我搞不清楚我在哪里出了问题。

并非所有时候都是如此,但它有这样的时刻。

谢谢你,谁会回答呢:)。

 
alsu:
我不是说这个,我是说EA在哪里有什么区别?如果写得正确,放在哪里都没有区别--只要放在蒙古国汇率的图表上就可以了,但如果设置为在欧元兑美元1分钟上操作,它就会这样做。而且编程也不难,只要改几行就可以了。

非常感谢您的澄清!

只是我担心测试仪模拟一分钟的条形图,在每个一分钟的条形图的开口处进行修改。

我将尝试把Open[0]改为iOpen(NULL,1,0),并添加一个函数来检查一分钟柱的开盘情况。

几分钟过去了,在此期间,我调整了代码,并在M5的测试器上进行了尝试,并确保在这种情况下,测试器不会打开1分钟的条形图,虽然是规定的,而且每5分钟才修改一次,这是我所担心的。在所有刻度模式下,它要好一点,因为它修改的频率更高。但在M1上,只有在开条时才会有同样的效果,无论是用Open[0]还是用iOpen(NULL,1,0),对此我还是很感激的!

现在我将始终使用绿色的iOpen,因为我看到我可以不使用红色的Open。绿色的利润比红色的损失要好。(:))

 
mario065:

你好。

我遇到的问题是这样的。

在PERIOD_H1上工作。

为了在一小时后结束,我这样做。

要在一小时开始时开仓,我这样做
但对于测试来说,它是这样的

我搞不清楚我在哪里出了问题。

并非所有时候都是如此,但它有这样的时刻。

谢谢,谁来回应 :)


一个朋友给了我一个提示。
而不是TimeCurrent()

TimeSeconds(TimeCurrent())

而且还很有效。

 
russcand:
你能告诉我如何写: 价格已经越过水平线上升....那么这条线路应该如何描述呢?

如果第一个条形图上的指标值大于水平线的 值,并且,第二个条形图上的指标值小于水平线的值,那么指标线已经向上越过水平线。
水平线的描述是一个常数,即它在指标窗口尺寸中的值。让我们把鼠标光标放在它上面,看看这个值。