如何编码? - 页 257

 

查看Metatrader帮助中的时间函数。然后尝试像这样的方法

如果(TimeHour(Time[0]) TradeHourStop)

{

Comment("Trading suspended - outside trade hours");

return(false);

}

其中TimeHourStart和stop是由你设置的外部变量。 return(false);将退出启动函数,不做进一步处理。

祝您好运。

 

谢谢你的快速回复,Tzuman。

不幸的是,我的MT4编程目前仅限于一个在线EA生成器。

不过,这正是我所寻找的!

 

如何编码配置评论的文字颜色和字体大小?

大家好。

我正在做一个EA,我只是一个初级程序员......。

我有一个问题,一般来说,如何编码评论的字体大小和文本颜色,并使其成为用户可配置的。我需要创建哪些外部变量?我应该如何编程呢?

我知道如何使用评论功能,比如说像这样。

if(TextOnScreen == true) Comment("This text appears on the screen " )。

但如何编程使用户可以改变屏幕上出现的文字的字体大小,以及如何通过改变EA选项中的设置来改变该文字的颜色?

谁能用几行代码来帮助我?非常感谢。

非常感谢您。

约翰

 
korthouj:
大家好。

我正在开发一个EA,我只是一个初级程序员......

我有一个问题,一般来说,如何对评论的字体大小和文本颜色进行编码,并使其成为用户可配置的。我需要创建哪些外部变量?我应该如何编程呢?

我知道如何使用评论功能,比如说像这样。

if(TextOnScreen == true) Comment("This text appears on the screen " )。

但如何编程使用户可以改变屏幕上出现的文字的字体大小,以及如何通过改变EA选项中的设置来改变该文字的颜色?

谁能用几行代码来帮助我?非常感谢。

非常感谢您。

乔安

你需要使用图形对象,比如说表格。如何做到这一点--你可以在手册中轻松阅读。

 
korthouj:
大家好。

我正在开发一个EA,我只是一个初级程序员......

我有一个问题,一般来说,如何对评论的字体大小和文本颜色进行编码,并使其成为用户可配置的。我需要创建哪些外部变量?我应该如何编程呢?

我知道如何使用评论功能,比如说像这样。

if(TextOnScreen == true) Comment("This text appears on the screen " )。

但如何编程使用户可以改变屏幕上出现的文字的字体大小,以及如何通过改变EA选项中的设置来改变该文字的颜色?

谁能用几行代码来帮助我?非常感谢。

非常感谢您。

乔安

Johan,

研究一下附件中的指标。

其中一些代码是为使用模板时准备的。

当一个货币对的文本因为模板而出现在另一个货币对的图表上时,我发现了这个问题。

如果需要更多的文本行,你应该能够弄清楚。

如果不需要,我将再次发帖,展示一个多行的例子。

罗伯特

附加的文件:
 

为什么关闭订单失败,如何限制订单?

我是MQL4的新手,刚刚测试了我自己的一个EA,但它看起来无法关闭订单,它将在每一栏打开订单,直到freemargin变成0,然后它将强制停止所有订单。 我不知道如何限制开放订单的数量。 谁能告诉我,感谢TKS!

我的代码如下。

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

//| Moving Average.mq4

//| 2005年,MetaQuotes软件公司版权所有。|

//|TeamWox Groupware / MetaQuotes Software Corp.|

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

#define MAGICMA 20110309

外部双数 Lots = 1;

外置双倍最大风险 = 0.02;

extern double DecreaseFactor = 10;

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

//| 计算未结头寸 |

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0。

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

如果(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

如果(OrderType()==OP_BUY) buys++;

如果(OrderType()==OP_SELL) sells++;

}

}

//---- 返回订单量

if(buys>0) return(buys);

否则返回(sells)。

}

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

//|计算最佳手数 |

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

double LotsOptimized()

{

double lot=Lots;

int orders=HistoryTotal(); // 历史订单总数

int losses=0; // 亏损订单的数量,没有休息时间

//---- 选择手数大小

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1)。

Print(MarketInfo(Symbol(), MODE_LOTSIZE))。

Print(MarketInfo(Symbol(), MODE_MINLOT))。

Print(MarketInfo(Symbol(), MODE_LOTSTEP))。

Print(MarketInfo(Symbol(), MODE_MAXLOT))。

//----,计算无休止的损失订单的数量

如果(DecreaseFactor>0)

{

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("历史中的错误!"); break; }

如果(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 继续。

//----

if(OrderProfit()>0) break;

if(OrderProfit()<0) losses++;

}

如果(损失>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

//这是一个聪明的技术设计,但亏损代表损失的利润,而不是钱,可能会导致问题。

//将其修改为:accountfreemargin()-orderprofit()

}

//---- 返回手数大小

if(lot<1) lot=1;

return(lot);

}

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

//| 检查未平仓订单的情况 |

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

空白 CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//----,只对新条形图的第一个点进行交易。

if(Volume[0]>1) return;

//---- 获取移动平均线

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0)。

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0)。

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1)。

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1)。

//---- 卖出条件

如果(m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "My order #1",MAGICMA,0,Red)。

返回。

}

如果(m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "My order #2",MAGICMA,0,Yellow);

返回。

}

//---- 买入条件

if ( m1>m3+0.0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #1",MAGICMA,0,Blue)。

返回。

}

如果(m2>m4+0.0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #2",MAGICMA,0,Green)。

返回。

}

//----

}

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

//| 检查平仓条件 |

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

空白 CheckForClose()

{

双重m1,m2,m3,m4。

//----,只对新条形图的第一个点进行交易。

if(Volume[0]>1) return;

//---- 获取移动平均线

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0)。

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0)。

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1)。

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1)。

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

如果(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) 继续。

//---- 检查订单类型

如果(OrderType()==OP_BUY)

{

如果(m1<m3+0.0002)

{

OrderClose(OrderTicket(),OrderLots(), Bid,3,Violet)。

休息。

}

如果(m2<m4+0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White)。

休息。

}

}

如果(OrderType()==OP_SELL)

{

如果(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan)。

休息。

}

如果(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon)。

break;

}

}

}

//----

}

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

//| 启动功能 |

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

空白启动()

{

//---- 检查历史和交易情况

如果(Bars<55 || IsTradeAllowed()==false) 返回。

//---- 按当前符号计算未结订单

如果(CalculateCurrentOrders(Symbol())==0)CheckForOpen();

否则CheckForClose()。

//----

}

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

 

检测Windows版本

有没有人现在有一个简单的方法,只用一个windows的API调用,就能找出正在运行的windows MT4的版本。

谁能告诉我如何使这个工作。

#import "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo)。

#import

GetVersionEx函数(Windows)

谢谢你

 

需要帮助。对我的CCI背离式EA进行小的调整

我有一个CCI发散型EA,使用MT4中指标文件夹中的自定义CCI发散指标来决定何时进行交易。

我想做的是使用一个自定义的Stochastics Divergence 指标(我有这个指标)来代替。

我不知道如何改变EA的代码,使其指向指标文件夹中的随机指数分歧指标。

在EA的输入中,我想我需要替换。

extern int CCI_Period = 10;

替换为

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

在代码的主要部分,我找到了指向指标文件夹中的自定义CCI背离指标的区域。

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2)。

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 1, 2) 。

我知道我必须把 "CCI_Divergence_Indicator "改为 "Stochastics_Divergence_Indicator",这是指标文件夹中自定义随机背离指标的名称。而且我必须删除CCI_Period和9。

但我不知道如何在这部分代码中加入Stoch_K、Stoch_D和Stoch_Slowing。

我试着自己改变它,但随后EA就打不开了。

有谁知道如何对这部分代码进行编码,以使随机背离指标能够取代cci背离指标?

我付钱给一个程序员来创建这个EA,但是他非常忙于其他客户的项目。所以当涉及到小的修改/修复时,他没有时间为我做--至少不是马上。因此,这就是为什么我在这里问。

CCI背离指标有太多的错误信号。Stochastics Divergence指标要好得多。这就是为什么我想做转换。

先谢谢你了。

 

请帮助我

我有一行代码,当1个小节的价格(无论是1米5还是189米)在1个小节内移动200个点时,会向我发出警报。但我一生都想不出如何设置它只向特定方向发出警报。

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); //这样做很好。

但是我希望能够区分200点上升和200点下降。我读过书,在论坛上问过,在聊天室里问过,把自己逼疯了3天。

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");
原因: