编码帮助 - 页 188

 

你好mladen或任何人。

我注意到MT4平台有一些默认指标(虽然有些是在自定义指标 部分重复的),但我认为代码并不完全相同,如何检索或看到这些默认指标的代码,非常感谢您的告知。

 
kenwa:
你好mladen或任何人,我注意到mt4平台有一些默认的指标(虽然有些是在自定义指标部分重复的,),但我认为代码并不完全相同,如何检索或看到这些默认指标的代码,非常感谢你告诉我。

你不可以

那些是内置指标(直接由终端执行)。

 

似乎那些内置的指标比那些在自定义指标 会话中的功能要好,真的没有办法知道它们的代码?

 

有人问我如何从一个文件中使用多时间框架(当它不可能调用内置函数时)。

下面是一个简单的例子和其中的一些解释

_____________________________

所附的指标表现为3个指标合二为一,在代码中你可以找到注释,说明什么时候做什么。我希望这能帮助一些人清楚如何制作一个单一文件的正确的多时间框架指标(除其他外,将始终计算正确的条数,而不假设目标时间框架内有多少条被改变)。

因此,这个简单的单文件多时间框架指标可以很容易地被用作多时间框架指标的模板。

附加的文件:
 

嗨,mladen。

你知道是否有可能以及如何做iStochasticOnArray吗? 有什么模板或公式可以做吗? 谢谢告知。

 
kenwa:
嗨,mladen,你知道是否有可能以及如何做iStochasticOnArray吗? 有什么模板或公式可以做吗?

kenwa

没有所谓的内置函数。在这些帖子中,你可以看到如何写一个函数来做这个事情,以及如何使用它:https://www.mql5.com/en/forum/177239/page34

 

你好,Mladen。

对我来说有点深奥

例如:double iStoch(double priceR, double priceH, double priceL, int period, int slowing, int i, int instanceNo=0)是双倍的吗? 这个方法可以减少mq4内的索引缓冲区占用吗?

我对它的功能 有点奇怪

stoch = iStoch(rsi,rsi,rsi,StoPeriod,StoSlowing,i)。

谢谢你的解释。

 
mladen:
我不知道为什么它不接受其他的WAV文件。

如果你在代码中改变了它,它应该接受它

如果要重复5次,你应该把它放在一个循环中,但这可能会引起一些问题(如果声音文件太长)。

以下是我使用的代码(我对编码知之甚少,不知道如何进行循环)。

//+-----------------------------------------------------------------

#property copyright "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#属性 indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

外部 bool alertsOn = true;

外部bool alertsSound = true;

外部bool alertsMessage = true;

外部bool alertsNotification = false;

外置的 bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[]。

string symbols[];

int types[];

int times[]。

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// 为订单收集数据

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

如果(alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) 继续。

如果(alertsForMagicNumber !=0 && alertsForMagicNumber!=OrderMagicNumber())继续。

如果(alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())),继续。

//

//

//

//

//

for (int k=ArraySize(tasks); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

如果(k==0)

{

int size = ArraySize(t tickets)+1;

ArrayResize(t tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime()。

}

}

//

//

// 检查某些订单是否需要被提醒,以便

//

//

for (i=ArraySize(ticket)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true。

switch (type)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break;

case OP_BUYLIMIT : type = "buy limit"; break;

case OP_SELLSTOP : type = "sell stop"; break;

case OP_SELLLIMIT : type = "sell limit"; break;

}

doAlert(type+" opened at :"+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" for "+symbols)。

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

空白的doAlert(string doWhat)

{

字符串消息。

message = doWhat;

如果(alertsMessage)警报(消息)。

如果(alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

如果(alertsNotification)SendNotification("order alerts "+message);

如果(alertsSound) PlaySound("hallelujah.wav")。

}

但它在被触发时只是响起普通警报。

我想:如果我不能让PlaySound改变,你能不能在一个循环中编码,每隔1秒重放一个简短的常规警报,持续10次?- 至少这要比单一的常规警报声更能唤醒我......。

谢谢你

 
person77:
下面是我使用的代码(我对编码知之甚少,不知道如何做循环)。

//+-----------------------------------------------------------------

#属性版权 "https://www.forex-tsd.com"

#property link "https://www.forex-tsd.com"

#属性 indicator_chart_window

//-----------------------------------------------------------------

extern int alertsForNotOlderThan = 300;

extern int alertsForMagicNumber = 0;

extern string alertsForSymbol = "";

外部 bool alertsOn = true;

extern bool alertsSound = true;

外部bool alertsMessage = true;

外部bool alertsNotification = false;

外置的 bool alertsEmail = false;

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

int tickets[];

bool alerted[]。

string symbols[];

int types[];

int times[]。

int init() { return(0); }

int deinit() { return(0); }

int start()

{

//

//

// 为订单收集数据

//

//

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS)) continue;

如果(alertsForSymbol != "" && alertsForSymbol!=OrderSymbol()) 继续。

如果(alertsForMagicNumber !=0 && alertsForMagicNumber!=OrderMagicNumber())继续。

如果(alertsForNotOlderThan < (TimeCurrent()-OrderOpenTime())),继续。

//

//

//

//

//

for (int k=ArraySize(tasks); k>0; k--)

if (OrderTicket()==tickets[k-1]) break;

如果(k==0)

{

int size = ArraySize(t tickets)+1;

ArrayResize(t tickets,size); tickets = OrderTicket();

ArrayResize(alerted,size); alerted = false;

ArrayResize(symbols,size); symbols = OrderSymbol();

ArrayResize(types ,size); types = OrderType();

ArrayResize(times ,size); times = OrderOpenTime()。

}

}

//

//

// 检查某些订单是否需要被提醒,以便

//

//

for (i=ArraySize(ticket)-1; i>=0; i--)

{

string type = "";

if (!alerted)

{

alerted = true。

switch (type)

{

case OP_BUY : type = "buy"; break;

case OP_SELL : type = "sell"; break;

case OP_BUYSTOP : type = "buy stop"; break;

case OP_BUYLIMIT : type = "buy limit"; break;

case OP_SELLSTOP : type = "sell stop"; break;

case OP_SELLLIMIT : type = "sell limit"; break;

}

doAlert(type+" opened at :"+TimeToStr(times,TIME_DATE|TIME_SECONDS)+" for "+symbols)。

}

}

return(0);

}

//-------------------------------------------------------

//

//-------------------------------------------------------

//

//

//

//

//

空白的doAlert(string doWhat)

{

字符串消息。

message = doWhat;

如果(alertsMessage)警报(消息)。

如果(alertsEmail) SendMail(StringConcatenate(Symbol()," order alerts "),message);

如果(alertsNotification) SendNotification("order alerts "+message);

如果(alertsSound) PlaySound("hallelujah.wav")。

}

但它在被触发时只是响起普通警报。

我想:如果我不能让PlaySound改变,你能不能在一个循环中编码,每隔1秒重放一个简短的常规警报,持续10次?- 至少那会比单一的常规警报声更能唤醒我......。

谢谢你

人77。

以前的工作方法是进入一个开放的图表,然后进入工具/选项/事件,然后在警报中简单地改变WAV.到你想要的,但有一段时间没有这样做,所以不确定这是否仍然有效,并确保你使用的WAV文件在声音文件夹中。

附加的文件:
alert.png  99 kb
 

mrtools - 谢谢你:效果很好。

原因: