编码帮助 - 页 350

 
apprentice coder:
我如何从代码中测试与经纪商的连接是打开还是关闭?

你可以使用IsConnected() 函数,但 ...

如果没有新的点数进入,该函数将永远不会被达到

因此,你必须让它处于无休止的循环中(这对EA来说是不可接受的),或者你必须使用定时器事件来检查(在这种情况下,如果它是EA,它可以警告你没有连接。我想我们都认为指标对连接的要求不高--没有订单等操作--所以定时器解决方案也可以适用于指标,但从那里检查可能不如从EA检查来得重要)。否则你的代码将不知道连接已经丢失。

 
mladen:
你可以使用IsConnected() 函数,但...

如果没有新的刻度线进入,该函数将永远不会被达到

所以,你必须保持无休止的循环(这对EA来说是不可接受的),或者你必须使用定时器事件来检查(在这种情况下,如果它是一个EA,它可以警告你没有连接。我想我们都认为指标对连接的要求不高--没有订单等操作--所以定时器解决方案也可以适用于指标,但从那里检查可能不如从EA检查来得重要)。否则你的代码将不知道连接已经丢失。

你能贴出一些能做到这一点的代码例子吗?

 
apprentice coder:
你能贴出一些能做到这一点的代码例子吗,谢谢?

明天将发布一个例子。好吗?

 
mladen:
明天将发布一个例子。好吗?

好的。让我们休息一下吧

 
apprentice coder:
你能贴出一些能做到这一点的代码例子吗?

编码学徒

这里有一个简单的指标(但它的使用方式,你可以在EA中做得完全一样),它在所需的时间间隔内检查经纪人的连接状态:_check_connection.mq4

#property indicator_chart_window

extern int CheckStatusEveryNMilliseconds = 250;

int init() { EventSetMillisecondTimer(CheckStatusEveryNMilliseconds); return(0); }

int deinit() { EventKillTimer(); return(0); }

int start() { return(0); }

void OnTimer()

{

static bool previouslyConnected = true;

bool currentlyConnected = IsConnected();

if (previouslyConnected != currentlyConnected)

{

previouslyConnected = currentlyConnected;

string cdescription = "disconnected"; if (currentlyConnected) cdescription = "connected";

Comment("connection status changed.\nterminal is now : "+cdescription);

}

正如你所看到的,这只是一个简单的例子,如何做到这一点?

附加的文件:
 
mladen:
编码学徒

这里有一个简单的指标(但它的使用方式,你可以在EA中做得完全一样),在所需的时间间隔内检查经纪人的连接状态:_check_connection.mq4

#property indicator_chart_window

extern int CheckStatusEveryNMilliseconds = 250;

int init() { EventSetMillisecondTimer(CheckStatusEveryNMilliseconds); return(0); }

int deinit() { EventKillTimer(); return(0); }

int start() { return(0); }

void OnTimer()

{

static bool previouslyConnected = true;

bool currentlyConnected = IsConnected();

if (previouslyConnected != currentlyConnected)

{

previouslyConnected = currentlyConnected;

string cdescription = "disconnected"; if (currentlyConnected) cdescription = "connected";

Comment("connection status changed.\nterminal is now : "+cdescription);

}

正如你所看到的,这是一个简单的例子,它可以做到的。

谢谢:0

我看到它今天还能工作(没有刻度)。

 
mladen:
改变fxpreislevelsv5.ex4或fxpreislevelsv5.dll的名称(metatrader在这种情况下不承认扩展名--无论扩展名是什么,你都必须有不同的文件名)。

谢谢你的帮助!!

但我遇到了一个不同的问题,在编译后,没有错误,但它不运行,并一直在删除

"2014.09.20 19:56:40.262 Custom indicator Trend_Imperator_V2e GBPUSDe,M5: remove

2014.09.20 19:56:38.901 自定义指标Trend_Imperator_V2e GBPUSDe,M5:加载成功"

总是发生我必须更新代码吗?

 
forexeaexpert:
谢谢你的帮助!!

但我遇到了一个不同的问题,在编译后,没有错误,但它不运行,并一直在删除

"2014.09.20 19:56:40.262 Custom indicator Trend_Imperator_V2e GBPUSDe,M5: remove

2014.09.20 19:56:38.901自定义指标Trend_Imperator_V2e GBPUSDe,M5:加载成功"

总是发生这种情况,我必须更新代码吗?

外汇专家

该错误通常发生在调用指标时参数 错误的情况下

检查该指标的iCustom()调用中的参数。

 

你好 mladen ,

我试图在我的EA中插入这个指标。

但经过测试,它只得到一个购买信号。

请帮我看看,我插入的代码是否正确。

MACD = iCustom(NULL,0,"MACD_ColorHist_Alert_EMA 2",FastEMA,SlowEMA,SignalEMA,true,true,true,false,false,false,false,false,false,false,false,0);

我知道macd>0和macd<0是跨越 零线的信号

但我怎样才能从斜率方向得到另一个信号?

我非常困惑,在尝试了这么多次之后

附加的文件:
 
stevenpun:
你好,mladen。

我试图在我的EA中插入这个指标。

但经过测试,它只得到一个购买信号。

请帮我看看,我插入的代码是否正确。

MACD = iCustom(NULL,0,"MACD_ColorHist_Alert_EMA 2",FastEMA,SlowEMA,SignalEMA,true,true,true,false,false,false,false,false,false,false,false,0);

我知道macd>0和macd<0是跨越零线的信号。

但我怎样才能从斜率方向得到另一个信号?

我非常困惑,在尝试了这么多次后,

stevenpun

对于这一点,最简单的方法是在该指标上添加一些 "斜率方向 "的缓冲区,或者使用一些已经在缓冲区中解决了斜率问题的其他MACD