如何编码? - 页 199

 
V-Force:
我是mq4的新手,我试图在屏幕上创建一个显示,当MACD出现交叉的时候。以下是我的代码,但每隔几分钟就会弹出警报。

我如何编写代码使其每小时只显示一次警报?或者每个柱子一个警报?

int start()

{

string MACD1=""。

color colt9;

double MACDM_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 0);

double MACDS_S10 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,0);

double MACDM_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_MAIN, 1);

double MACDS_S11 = iCustom(NULL, PERIOD_H1, "MACD", 8,17,9, MODE_SIGNAL,1);

如果((MACDM_S11 < MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="IN UPTREND"; colt9=LimeGreen; }

如果((MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10)) { MACD1="下降趋势"; colt9=红色; } 如果(MACDM_S11 > MACDS_S11 && MACDM_S10 > MACDS_S10))

如果((MACDM_S11 > MACDS_S11 && MACDM_S10 < MACDS_S10)) { MACD1="新上升交叉点"; colt9=石灰绿; }

如果((MACDM_S11 MACDS_S10)) { MACD1="新的下跌横盘"; colt9=红色; }.

字符串MACD2=""。

颜色 colt14;

double MACDM_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 0);

double MACDS_L10 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,0);

double MACDM_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_MAIN, 1);

double MACDS_L11 = iCustom(NULL, PERIOD_H1, "MACD", 12,26,9, MODE_SIGNAL,1);

如果((MACDM_L11 < MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="IN UPTREND"; colt14=LimeGreen; }

如果((MACDM_L11 > MACDS_L11 && MACDM_L10 > MACDS_L10)) { MACD2="下降趋势"; colt14=红色; }

如果((MACDM_L11 > MACDS_L11 && MACDM_L10 < MACDS_L10)) { MACD2="新上升交叉点"; colt14=石灰绿色; }

如果((MACDM_L11 MACDS_L10)) { MACD2="新的下跌横盘"; colt14=红色; }

如果(MACD1=="新上升交叉点"&&MACD2=="上升中")

Alert(Symbol()," - ", "H1:"," MACD MAIN UPTREND MOVEMENT"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS))。

如果(MACD1=="新的下降交叉点"&&MACD2=="下降中")

Alert(Symbol()," - ", "H1:"," MACD主要下跌走势"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS));

如果(MACD2=="新上升交叉点"&MACD1=="上升中")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO UPTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS) )。

如果(MACD2=="新的下降交叉点"&MACD1=="处于下降趋势")

Alert(Symbol()," - ", "H1:"," MACD, MAIN TREND CHANGE TO DOWNTREND"," at ", Bid, " - ",TimeToStr(CurTime(),TIME_SECONDS))。

return(0)。

}

尝试在条件中使用Minute()==1;。

 

趋势Alexcud的修改

if (MaH11v < MaH1pr1v){H11v = " V "; co11v = Red; u1x5v = 0; d1x5v = 1;} if (MaH11v > MaH1pr1v){H11v = " / / / "; co11v = Blue; u1x5v = 1; d1x5v = 1; }

if (MaH11v > MaH1pr1v){H11v = " /\\ "; co11v = Blue; u1x5v = 1; d1x5v = 0;}.

if (MaH11v == MaH1pr1v){H11v = " 0 "; co11v = Green; u1x5v = 0; d1x5v = 0;}。

大家好,我正在尝试修改Alexcud趋势(附后)。

我希望只有2个向上和向下的信号,而不是3个 "0 "的信号......

这样计算才会更准确...

有什么想法吗?

附加的文件:
 

谁能帮助我理解这些编程线?用简单的英语来说

这是关于一个EA在一个条形图结束后开始的事情。

代码是这样的。

datetime timeprev=0;

// 每个完成的柱子只运行一次

if(timeprev==Time[0]) return(0);

timeprev = Time[0];

我看了MQ4手册,Time[0]是用来提取bar[0]的开盘时间。它被表述为从1970年1月1日起的秒数。

我不明白它是如何工作的。首先我们有 "timeprev=0"。

然后下一行 "如果(timeprev==Time[0])返回(0)。

这个时候,Time[0]的值是多少?为什么它可以变成0("timeprev "的值)?

下一行是 "timeprev=Time[0]"。

这一行怎么会让EA在一个柱子结束之前什么都不做?

 
crn:
尝试在条件中使用Minute()==1;。

这仍然会在每个条形图的第一分钟内触发每个刻度。这可能会大大减少数量,但它仍然会多次报警。

最好的办法是设置一个全局变量(或对象),并将其设置为最后一个柱状图的时间[]。

if (Time[0]!=lastTime) {

... alert, whatever...

lastTime=Time[0];

}

 
Jorged23:
你好。

我无法避免OrderModify的错误1:总是出现,即使尝试控制修改前的数据是不同的我也试过doublenormalize......不工作......。

这就是代码。

如果(Bid-OrderOpenPrice() >= VPoint*BreakEvenAtProfit)

{

如果(OrderStopLoss() != OrderOpenPrice() + BreakEvenShift*VPoint)

{

Vresult = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+ BreakEvenShift*VPoint,OrderTakeProfit(),0,Green) 。

有什么建议吗?

谢谢。

快速检查...确保你没有把盈亏平衡距离设置得太短。根据MarketInfo(Symbol(),MODE_STOPLEVEL)检查,以确保它足够大。

VPoint的目的是什么?如果这个数字是错误的,就会把事情搞乱。"Point "本身将永远是正确的。如果这个数字不对,那肯定会造成问题。如果它不小心为0或小于POINT的实际值。

 

简单的编码问题

OrderSelect(5555, SELECT_BY_TICKET);

RefreshRates()。

如果(Ask >= (OrderOpenPrice()+ (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_BUY)){

OrderClose(5555,1,Ask,10,Red); }

如果(Bid <= (OrderOpenPrice()- (5 * Point)) && OrderLots() == 2 && (OrderType() == OP_SELL)){

OrderClose(5555,1,Bid,10,Blue); }

仍在努力学习...

当价格与开盘价 相差5个点时,这是否可以用来关闭一半的头寸(2手减为1手)?

THANKS!!!!!!

 

看起来差不多。不过,这有点乱。你也可以使用OrderProfit,这取决于你实际想要实现的目标。

拉克斯

PS:忘了说了,要注意小数点后5位的经纪商。一切都需要乘以10,所以在你的例子中,5将是50。祝您好运!

 
luxinterior:
看起来差不多了。不过,这有点乱。你也可以使用OrderProfit,这取决于你实际想要实现的目的。

奢侈品

PS: 忘记说了,要注意小数点后5位的经纪商。一切都需要乘以10,所以在你的例子中,5将是50。祝您好运!

谢谢 LUX

问题是,我在温莎直接的1分钟英镑/美元图表 上运行调试,当它达到5点时,它没有关闭1手,所以我不知道是什么情况。

另外。

我试图关闭一个买入并立即打开一个卖出,这也是不顺利的。

它可以工作,然后又不工作......

我希望这个程序能更简单一些

if (*******************) {

RefreshRates()。

OrderSelect(5555,SELECT_BY_TICKET);

如果(OrdersTotal() > 0 && OrderType()==OP_BUY){OrderClose(5555, OrderLots(), Bid, Slippage, MediumSeaGreen);

如果(SignalMail)SendMail("[信号警报]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + "关闭买入");}

睡眠(1500)。

RefreshRates()。

如果(OrdersTotal() ==0)Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 10, 0, 0, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink) 。

if(Ticket<0)Print("OrderSend failed with error #",GetLastError())。

}

 

调试指标

我是这个语言的新手,我正在尝试写一个指标。由于没有调试器,我遇到了问题。我试着使用Print(),但什么都没有打印出来。使用Alert()我得到的缓冲区[1]的输出为零。谁能给我解释一下这个问题。我怎样才能使用Print()和Alert()来调试而不得到所有的ZERO。 如果有人有任何想法,请告诉我。非常感谢。

tigger.longtail@gmail.com

ExtMapBuffer1 = iMA(NULL,0,ExtParam1,0,MODE_EMA,PRICE_CLOSE,i) 。

ExtMapBuffer2 = iMA(NULL,0,ExtParam2,0,MODE_EMA,PRICE_CLOSE,i);

CurrentBar = Time;

如果( ExtMapBuffer1 >= ExtMapBuffer2 && CurrentBar == Time && Flag == 0)

{

Alert("ExtMapBuffer1 =", ExtMapBuffer1," Short is Above.",Hour()," Minute ",Minute())。

Alert("ExtMapBuffer2 =", ExtMapBuffer2," Short is Above.",Hour()," Minute ",Minute())。

Print("ExtMapBuffer1 = ", ExtMapBuffer1);

Print("ExtMapBuffer2 = ", ExtMapBuffer2);

 

没办法