如何编码? - 页 206 1...199200201202203204205206207208209210211212213...347 新评论 Pheniox 2009.09.21 21:44 #2051 使用外部*.set文件 我试了又试,但还是搞不清楚,所以希望有人能透过森林看到这棵树。 我想对EA进行编程,使其使用自己的编程设置或使用外部*.set文件。 所以,如果。 extern bool UseExternSet = true; 它将使用外部设置文件中的设置,而不是编程的设置。 我知道这是可以做到的,但我不知道该怎么办。 任何EA的例子都可以。 伯纳德 username1 2009.09.22 20:58 #2052 编译器问题还是代码问题? extern int ma1period=5; extern int ma1method=1; extern int ma1tf=0; extern int ma2period=5; extern int ma2method=1; extern int ma2tf=10080; extern double lots=1; int init(){} int deinit(){} double CMA (int tf,int period, int shift, int method) { double MA=iMA(NULL,tf,period,0,method,0,shift) return(MA) } int start() { int BarsCount=0; if (Bars> BarsCount) { BarsCount=Bars; double ma1.1=CMA(ma1tf,ma1period,1,ma1method); double ma1.2=CMA(ma1tf,ma1period,2,ma1method); double ma2.1=CMA(ma2tf,ma2period,1,ma2method); double ma2.2=CMA(ma2tf,ma2period,2,ma2method); bool ma1upsignal =ma1.2<ma1.1; bool ma1downsignal =ma1.2>ma1.1; bool ma2upsignal =ma2.2<ma2.1; bool ma2downsignal =ma2.2>ma2.1; if (ma1upsignal&&ma2upsignal) { OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green); } if (ma1downsignal&&ma2downsignal) { OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green); } if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal)) { int total=OrdersTotal(); //Script to close all open orders. for(int i=total-1;i>=0;i--) { OrderSelect(i, SELECT_BY_POS); int type = OrderType(); switch(type) { //Close opened long positions case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red ); break; //Close opened short positions case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red ); } } } } 这是我正在处理的一段代码。编译器说 "变量BarsCount未被定义"。我应该怎么做?在我看来,这个变量已经被初始化并给了一个值。 这是我的编译器问题还是代码问题? 附加的文件: capture2_1.png 12 kb How to code? 请帮我看看这个ea,orderclose执行不了,谢谢! Need Help Spotting Coding Michel 2009.09.22 21:18 #2053 [代码] double CMA (int tf,int period, int shift, int method) { double MA=iMA(NULL,tf,period,0,method,0,shift)。 返回(MA)。 } username1 2009.09.22 21:42 #2054 username1:[代码]double CMA (int tf,int period, int shift, int method) { double MA=iMA(NULL,tf,period,0,method,0,shift)。 返回(MA)。 } 米歇尔。 谢谢。这就解决了问题。 :-) Michael 2009.09.22 22:03 #2055 计算连续的条形图 谁有一些关于如何计算连续买入/卖出条的代码? 我想计算图表上有多少次(输入要检查的条数)连续出现1个卖出条,连续出现32个卖出条,连续出现3个卖出条,连续出现4个卖出条(和买入条一样)等等。 我知道我需要进行循环,但我不知道如何进行。 结果可以放在Comment()中。 谢谢。 bellco 2009.09.23 02:41 #2056 为什么我的程序不工作? 我写了一个简单的程序。 它应该是一次只输入一个订单,并以获利或止损方式退出。 它是为英镑兑美元的M30设置的。 也就是说:程序中的一些常数是通过 "眼球 "估计出来的。这应该不会对程序产生很大的影响......它也不会在不同的常数下工作。(至少,当用策略测试器 测试时,设置为快速或中等:而不是 "逐点"。(太慢了...) 总之,这个程序在测试时没有输入订单,也没有在 "上升 "方向上进行检查。(这一点,通过 "打印"/跟踪)。 (它应该检查:以买入或以卖出的方式进入)。 偶然的逻辑:检查2个连续的小节。如果条形图1有:一个较高的高点和一个较高的低点,程序认为下一个条形图将是向上的。 (与之相对应的是下跌。) 获利和止损相应地被设置。 当 "如果 "语句被嵌套时,该程序也不工作....。 谢谢你看这个。 //+------------------------------------------------------------------+ //|专家初始化功能 //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家的去初始化功能| //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //|专家启动功能| //+------------------------------------------------------------------+ int start() { //---- bool TrendUp1; double TakeProfitUp; double EE = .00500; bool OrdTot_OK;double lot;double slip; double SL_Trailing_Up;bool High2Up;bool Low2Up; int ticketup;int ticketdown;bool DownAndBig;bool UpAndBig; bool TrendDown; double SL_Trailing_Down; double TakeProfitDown; bool High2down; bool Low2down。 int ABC = OrdersTotal(); double Size1 = .00630;bool BigUp; double A = High[1]; double B= Low[2]; //41 double C= High[2]; double D= Low[1];bool BigDown; //------------------------------------down订单开始 如果(ABC == 0)//没有订单出来是真的 OrdTot_OK = true。 如果(ABC == 0)//没有订单出局为真 打印("在下跌订单序列中,没有订单出局")。 如果((C-D) > Size1)//2的高点减1的低点>.0063 BigDown = true。 如果((C-D) > Size1)//2的高点减去1的低点 > .0063 Print ("在下跌订单序列中,发现了一个大的向下突破")。 如果(High[1]<High[2]) High2down=true。 如果(High[1]<High[2]) Print ("在向下的订单序列中,连续的条形图有递减的高点")。 如果(Low[1]< Low[2]) Low2down=true。 如果(Low[1]<Low[2]) Print ("在下单序列中,连续的条形图有递减的低点")。 如果(High2down && Low2down) TrendDown=true。 如果(High2down && Low2down) Print ("在下跌订单序列中,TrendDown标志被设置")。 如果(TrendDown) SL_Trailing_Down = High[1]; 如果(TrendDown) Print ("在下跌订单序列中,确实设置了止损")。 如果(TrendDown) TakeProfitDown = Bid - (.005); 如果(TrendDown) Print ("在下跌订单序列中,得到了一个止盈", TakeProfitDown); 如果(TrendDown && BigDown) DownAndBig = true。 如果(DownAndBig && OrdTot_OK) ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue)。 如果(DownAndBig && OrdTot_OK) Print ("在下跌订单序列中,试图输入一张票", ticketdown); 如果(ticketdown < 0) Print("OrderSend_Down失败,错误#",GetLastError())。 return(0); //----------------------------------------------down order done //---------------------------------------------------up order start 如果(ABC == 0) OrdTot_OK = true。 如果(ABC == 0) 打印("在上升序列中,没有订单出来")。 如果 ((A - B) > Size1) BigUp = true。 如果((A - B) > Size1) Print ("在上升序列中,两个柱子的大小测试是确定的")。 如果(High[1] > High[2]) High2Up = true;//44 如果(High[1] > High[2]) Print ("在上升序列中,增加高点的测试是确定的")。 如果(Low[1] > Low[2]) Low2Up=true。 如果(Low[1] > Low[2]) Print ("在上升序列中,对增加的低点的测试是确定的")。 如果(High2Up && Low2Up) TrendUp1=true。 如果(High2Up && Low2Up) Print ("在上升序列中,确实设置了上升的标志")。 如果(TrendUp1) SL_Trailing_Up = Low[1] ; 如果(TrendUp1) Print ("在上升的序列中,建立了止损")。 如果(TrendUp1) TakeProfitUp = Ask + (.005); 如果(TrendUp1) Print ("在上升的序列中,建立了止盈", TakeProfitUp); 如果(TrendUp1 && BigUp) UpAndBig = true。 如果( UpAndBig && OrdTot_OK) ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up, TakeProfitUp,Red); 如果(UpAndBig && OrdTot_OK) Print ("在上升序列中,试图发送一个订单",ticketup)。 如果(ticketup < 0) Print("OrderSend_Up failed with error #",GetLastError())。 return(0); //-------------------------------------------------up order done //---- return(0);//不确定这一行的情况 //+------------------------------------------------------------------+ //---- return(0); } //+------------ 问吧! How to code? Ask! smsfm 2009.09.24 17:57 #2057 交易前/后的最小条数 你好。 你好,我是MT4的新手。谁能告诉我,如何在EA中设置限制,要求至少有 "x "个柱子才能开立新的头寸或关闭之前的头寸? (不使用睡眠命令) 请注意。 happyfx 2009.09.25 10:30 #2058 mql编码帮助 if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2; --------------------------------------------------------------- 这是什么意思呢? 使用了2个LWMA ? LWMA周期=24 shift =0 on price weighted (hcll4) cross over LWMA周期120 shift =1 on price weighted (hcll4) then buy or sell ? ljubas 2009.09.26 10:29 #2059 关闭位置的问题 你好。 我刚刚开始使用我的新EA,开仓是好的,我设置了tp和sl。EA的开仓和平仓都是一个一个的,从来没有超过一个订单。但我想在某些指标在sl或tp限制前提醒我的情况下关闭头寸。 如果我尝试像这样的操作。 for (int i=1; i<=OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, 2)) { if (OrderSymbol()==Symbol()) { Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing } } }[/CODE] Nothing happened. Doesn't find any opened positions and I know there is 1. If I try something like this: for (int i=1; i<=OrdersTotal(); i++) { CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3); } Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared. If I try direcly by number to close: [CODE] Ans=OrderClose(0,alLots,Bid,2);// Order closing 我得到的错误信息是4107或4105,说股票是无效的。 谁能检查一下 这个问题和我附件中的EA并提供帮助? 谢谢 附加的文件: rsiproba.mq4 6 kb How to code? [Help] What's the reason Dear Mr. Rosh,To close username1 2009.09.26 18:30 #2060 iHighest iLowest 澄清 假设有3个柱子。栏[2],栏[1]和栏[0](当前)。 下面的 "stop_low() "函数是否能正确地找到条形[2]和[3]的最低点? double stop_low = iLowest(Symbol(),0,1,2,1); ------------------------------------------------------------ 参考。 int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0) 根据类型,返回最小值在特定时间段内的位移。 参数。 symbol - 符号,其数据应被用于计算指标。NULL表示当前符号。 timeframe - 时间框架。它可以是任何一个时间框架的枚举值。0表示当前图表的时间框架。 type - 系列数组标识符。它可以是系列数组标识符的任何一个枚举值。 count - 进行计算的周期数(从开始条形到后面条形的方向)。 start - 显示相对于当前条形图的条形图,数据应从该条形图中获取。 示例。 //计算范围内10个相关条形的最低值 //从当前图表上的第10条到第19条(含)的指数。 double val=Low; iHighest iLowest Clarification How to code? 初学者的问题 MQL5 MT5 MetaTrader 1...199200201202203204205206207208209210211212213...347 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
使用外部*.set文件
我试了又试,但还是搞不清楚,所以希望有人能透过森林看到这棵树。
我想对EA进行编程,使其使用自己的编程设置或使用外部*.set文件。
所以,如果。
extern bool UseExternSet = true;
它将使用外部设置文件中的设置,而不是编程的设置。
我知道这是可以做到的,但我不知道该怎么办。
任何EA的例子都可以。
伯纳德
编译器问题还是代码问题?
extern int ma1method=1;
extern int ma1tf=0;
extern int ma2period=5;
extern int ma2method=1;
extern int ma2tf=10080;
extern double lots=1;
int init(){}
int deinit(){}
double CMA (int tf,int period, int shift, int method)
{
double MA=iMA(NULL,tf,period,0,method,0,shift)
return(MA)
}
int start()
{
int BarsCount=0;
if (Bars> BarsCount)
{
BarsCount=Bars;
double ma1.1=CMA(ma1tf,ma1period,1,ma1method);
double ma1.2=CMA(ma1tf,ma1period,2,ma1method);
double ma2.1=CMA(ma2tf,ma2period,1,ma2method);
double ma2.2=CMA(ma2tf,ma2period,2,ma2method);
bool ma1upsignal =ma1.2<ma1.1;
bool ma1downsignal =ma1.2>ma1.1;
bool ma2upsignal =ma2.2<ma2.1;
bool ma2downsignal =ma2.2>ma2.1;
if (ma1upsignal&&ma2upsignal)
{
OrderSend(Symbol(),OP_BUY,lots,Ask,3,NULL,NULL,NULL,NULL,0,Green);
}
if (ma1downsignal&&ma2downsignal)
{
OrderSend(Symbol(),OP_SELL,lots,Bid,3,NULL,NULL,NULL,NULL,0,Green);
}
if ((ma1upsignal&&ma2downsignal)||(ma1downsignal&&ma2upsignal))
{
int total=OrdersTotal(); //Script to close all open orders.
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
switch(type)
{
//Close opened long positions
case OP_BUY : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
//Close opened short positions
case OP_SELL : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
}
}
}
}
这是我正在处理的一段代码。编译器说 "变量BarsCount未被定义"。我应该怎么做?在我看来,这个变量已经被初始化并给了一个值。
这是我的编译器问题还是代码问题?
[代码]
double CMA (int tf,int period, int shift, int method)
{
double MA=iMA(NULL,tf,period,0,method,0,shift)。
返回(MA)。
}
[代码]
double CMA (int tf,int period, int shift, int method)
{
double MA=iMA(NULL,tf,period,0,method,0,shift)。
返回(MA)。
}米歇尔。
谢谢。这就解决了问题。 :-)
计算连续的条形图
谁有一些关于如何计算连续买入/卖出条的代码? 我想计算图表上有多少次(输入要检查的条数)连续出现1个卖出条,连续出现32个卖出条,连续出现3个卖出条,连续出现4个卖出条(和买入条一样)等等。
我知道我需要进行循环,但我不知道如何进行。
结果可以放在Comment()中。
谢谢。
为什么我的程序不工作?
我写了一个简单的程序。
它应该是一次只输入一个订单,并以获利或止损方式退出。
它是为英镑兑美元的M30设置的。
也就是说:程序中的一些常数是通过 "眼球 "估计出来的。这应该不会对程序产生很大的影响......它也不会在不同的常数下工作。(至少,当用策略测试器 测试时,设置为快速或中等:而不是 "逐点"。(太慢了...)
总之,这个程序在测试时没有输入订单,也没有在 "上升 "方向上进行检查。(这一点,通过 "打印"/跟踪)。
(它应该检查:以买入或以卖出的方式进入)。
偶然的逻辑:检查2个连续的小节。如果条形图1有:一个较高的高点和一个较高的低点,程序认为下一个条形图将是向上的。
(与之相对应的是下跌。)
获利和止损相应地被设置。
当 "如果 "语句被嵌套时,该程序也不工作....。
谢谢你看这个。
//+------------------------------------------------------------------+
//|专家初始化功能
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家的去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//|专家启动功能|
//+------------------------------------------------------------------+
int start()
{
//----
bool TrendUp1; double TakeProfitUp; double EE = .00500;
bool OrdTot_OK;double lot;double slip;
double SL_Trailing_Up;bool High2Up;bool Low2Up;
int ticketup;int ticketdown;bool DownAndBig;bool UpAndBig;
bool TrendDown; double SL_Trailing_Down; double TakeProfitDown;
bool High2down; bool Low2down。
int ABC = OrdersTotal();
double Size1 = .00630;bool BigUp; double A = High[1]; double B= Low[2]; //41
double C= High[2]; double D= Low[1];bool BigDown;
//------------------------------------down订单开始
如果(ABC == 0)//没有订单出来是真的
OrdTot_OK = true。
如果(ABC == 0)//没有订单出局为真
打印("在下跌订单序列中,没有订单出局")。
如果((C-D) > Size1)//2的高点减1的低点>.0063
BigDown = true。
如果((C-D) > Size1)//2的高点减去1的低点 > .0063
Print ("在下跌订单序列中,发现了一个大的向下突破")。
如果(High[1]<High[2])
High2down=true。
如果(High[1]<High[2])
Print ("在向下的订单序列中,连续的条形图有递减的高点")。
如果(Low[1]< Low[2])
Low2down=true。
如果(Low[1]<Low[2])
Print ("在下单序列中,连续的条形图有递减的低点")。
如果(High2down && Low2down)
TrendDown=true。
如果(High2down && Low2down)
Print ("在下跌订单序列中,TrendDown标志被设置")。
如果(TrendDown)
SL_Trailing_Down = High[1];
如果(TrendDown)
Print ("在下跌订单序列中,确实设置了止损")。
如果(TrendDown)
TakeProfitDown = Bid - (.005);
如果(TrendDown)
Print ("在下跌订单序列中,得到了一个止盈", TakeProfitDown);
如果(TrendDown && BigDown)
DownAndBig = true。
如果(DownAndBig && OrdTot_OK)
ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue)。
如果(DownAndBig && OrdTot_OK)
Print ("在下跌订单序列中,试图输入一张票", ticketdown);
如果(ticketdown < 0)
Print("OrderSend_Down失败,错误#",GetLastError())。
return(0);
//----------------------------------------------down order done
//---------------------------------------------------up order start
如果(ABC == 0)
OrdTot_OK = true。
如果(ABC == 0)
打印("在上升序列中,没有订单出来")。
如果 ((A - B) > Size1)
BigUp = true。
如果((A - B) > Size1)
Print ("在上升序列中,两个柱子的大小测试是确定的")。
如果(High[1] > High[2])
High2Up = true;//44
如果(High[1] > High[2])
Print ("在上升序列中,增加高点的测试是确定的")。
如果(Low[1] > Low[2])
Low2Up=true。
如果(Low[1] > Low[2])
Print ("在上升序列中,对增加的低点的测试是确定的")。
如果(High2Up && Low2Up)
TrendUp1=true。
如果(High2Up && Low2Up)
Print ("在上升序列中,确实设置了上升的标志")。
如果(TrendUp1)
SL_Trailing_Up = Low[1] ;
如果(TrendUp1)
Print ("在上升的序列中,建立了止损")。
如果(TrendUp1)
TakeProfitUp = Ask + (.005);
如果(TrendUp1)
Print ("在上升的序列中,建立了止盈", TakeProfitUp);
如果(TrendUp1 && BigUp)
UpAndBig = true。
如果( UpAndBig && OrdTot_OK)
ticketup = OrderSend(Symbol(), OP_BUY,lot, Ask,slip, SL_Trailing_Up, TakeProfitUp,Red);
如果(UpAndBig && OrdTot_OK)
Print ("在上升序列中,试图发送一个订单",ticketup)。
如果(ticketup < 0)
Print("OrderSend_Up failed with error #",GetLastError())。
return(0);
//-------------------------------------------------up order done
//----
return(0);//不确定这一行的情况
//+------------------------------------------------------------------+
//----
return(0);
}
//+------------
交易前/后的最小条数
你好。
你好,我是MT4的新手。谁能告诉我,如何在EA中设置限制,要求至少有 "x "个柱子才能开立新的头寸或关闭之前的头寸?
(不使用睡眠命令)
请注意。
mql编码帮助
if (iMA(NULL, 0, 24, 0, MODE_LWMA, PRICE_WEIGHTED, 1) > iMA(NULL, 0, 120, 1, MODE_LWMA, PRICE_WEIGHTED, 1)) gi_268 = 2;
---------------------------------------------------------------
这是什么意思呢?
使用了2个LWMA ?
LWMA周期=24 shift =0 on price weighted (hcll4) cross over LWMA周期120 shift =1 on price weighted (hcll4) then buy or sell ?
关闭位置的问题
你好。
我刚刚开始使用我的新EA,开仓是好的,我设置了tp和sl。EA的开仓和平仓都是一个一个的,从来没有超过一个订单。但我想在某些指标在sl或tp限制前提醒我的情况下关闭头寸。
如果我尝试像这样的操作。
for (int i=1; i<=OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, 2)) {
if (OrderSymbol()==Symbol()) {
Ans=OrderClose(OrderTicket(),alLots,Bid,2);// Order closing
}
}
}[/CODE]
Nothing happened. Doesn't find any opened positions and I know there is 1.
If I try something like this:
for (int i=1; i<=OrdersTotal(); i++) {
CloseOrder(OrderValue(i,VAL_TICKET),OrderValue(i,VAL_LOTS),Bid,3);
}Compiler report error message that VAL_TICKER and VAL_LOTS are not defined and in examples I found they are nowhere declared.
If I try direcly by number to close:
[CODE]
Ans=OrderClose(0,alLots,Bid,2);// Order closing我得到的错误信息是4107或4105,说股票是无效的。
谁能检查一下 这个问题和我附件中的EA并提供帮助?
谢谢
iHighest iLowest 澄清
假设有3个柱子。栏[2],栏[1]和栏[0](当前)。
下面的 "stop_low() "函数是否能正确地找到条形[2]和[3]的最低点?
double stop_low = iLowest(Symbol(),0,1,2,1);
------------------------------------------------------------
参考。
int iLowest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)
根据类型,返回最小值在特定时间段内的位移。
参数。
symbol - 符号,其数据应被用于计算指标。NULL表示当前符号。
timeframe - 时间框架。它可以是任何一个时间框架的枚举值。0表示当前图表的时间框架。
type - 系列数组标识符。它可以是系列数组标识符的任何一个枚举值。
count - 进行计算的周期数(从开始条形到后面条形的方向)。
start - 显示相对于当前条形图的条形图,数据应从该条形图中获取。
示例。
//计算范围内10个相关条形的最低值
//从当前图表上的第10条到第19条(含)的指数。
double val=Low;