新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 300

 
buyanov:

但一切都没有改变。

错误和警告都保持不变。

给我整个代码,而不仅仅是其中的一个片段。你希望每个人都能猜到吗?那就在这里问吧--在这里,每个人都能一下子知道所有的 事情。

 

我给你的是整个代码。

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
buyanov:

我给你的是整个代码。

它只是巨大的...

 

所有代码

"

#property 版权所有“2017 年版权所有,MetaQuotes Software Corp.”

#property 版本“Cross20170703 1.00”


//================================================= =========================

extern int Period_FastMA=4;

外部 int Period_SlowMA=8;


外部 int MaxTickNum=30;

外部int MaxAttempt = 10;

extern int k_slippage=1;


extern double k_SL=10.0;//*Point()

extern double k_TP=30.0;//*Point()


extern double TrailDist=30.0;//*Point()

外部双 k_lots=0.3;

extern bool ExFin=false;



int//**************************************************** ***** ************************************


资源,

数数,

一世,

NextTick=0,

时间,

无限时,

BegMlSecTime,

EndMlSecTime,

增量时间,

试图,

滑点=5,

TickNum=0,

位置,

票,

最大间隔1000,

交叉数=0,

comis=4,

阿特,

试图,



呃;



双倍的 //*********************************************** ***** *******************************


全部的,

很多,

传播,


快马,

慢速MA,


三角洲,


最后一个三角洲,

上一篇三角洲,


Comis=0.00004,

开盘价,

收盘价,

SL,

TP,


利润,

利润;


bool//**************************************************** *** **********************************************


第一交叉=假,

下一个交叉=假,

曲线类型,

成功=真

启用=真,


乞求,

求,

BuyOpened=假,

开仓=假;


细绳//*********************************************** ***** ********************************************* *


记录,

海峡,

记录,

BegTime当前,

结束时间当前,

当前时间,

字符串,

弦贝格,

字符串结束;

//************************************************ ** ************************************************ ******* ******


//================================================= =================================================== ==============================

//================================================= =================================================== ===============================

//================================================= =================================================== ===============================




//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

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


//================================================= =================================================== ===========================


int OnDeinit(const int res)

{

Alert("请求 OnDeinit()");

错误=StringToInteger((字符串)错误);

返回(资源);

Alert("结束 OnDeinit()");

}

//OnDeinit();------------

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




//================================================= =================================================== ============================

无效专家停止()

{

Alert("ExpertStop");

if((ExFin==true)&&(TickNum==MaxTickNum))

{

专家删除();

OnDeinit(res);

}

} //结束ExpertStop


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



//================================================= =================================================== ========================

诠释错误描述()

{

Alert("求错误描述");

开关(错误)

{ case 0: err="没有错误";休息;

case 1: err="没有错误,但结果未知";休息;

案例2:err="一般错误";休息;

案例3:err="无效参数";休息;

case 4: err="交易服务器忙";休息;

case 5: err="旧版客户端";休息;

case 6: err="没有连接到交易服务器";休息;

案例7:err="权限不足";休息;

case 8: err="请求太频繁";休息;

案例9:err="非法操作破坏服务器";休息;

案例 64: err="账户被冻结";休息;

case 65: err="帐号不正确";休息;

案例 128: err="交易超时过期";休息;

案例 129: err="价格不正确";休息;

案例 130: err="错误停止";休息;

案例 131: err="不正确的音量";休息;

案例 132: err="Market Closed";休息;

案例 133: err="禁止交易";休息;

case 134: err="没有足够的钱来完成操作";休息;

案例 135: err="价格改变";休息;

案例 136: err="无价格";休息;

案例 137: err="经纪人忙";休息;

案例 138: err="新价格";休息;

case 139: err="订单被阻塞,正在处理中";休息;

case 140: err="只允许购买";休息;

案例 141: err="请求太多";休息;

case 145: err="由于订单离市场太近,不允许修改";休息;

案例 146: err="交易子系统忙";休息;

case 147: err="经纪商禁止使用订单到期日";休息;

case 148: err="未平仓单和挂单数量已达到broker设置的限制。";break;

//

案例 4000: err="无错误";休息;

case 4001: err="无效的函数指针";休息;

case 4002: err="数组索引超出范围";休息;

case 4003: err="函数栈没有内存";休息;

case 4004: err="递归调用后堆栈溢出";休息;

case 4005: err="栈上没有内存可以传参数";休息;

case 4006: err="Out of memory for string parameter";休息;

case 4007: err="临时字符串内存不足";休息;

案例 4008: err="未初始化的字符串";休息;

case 4009: err="数组中未初始化的字符串";休息;

case 4010: err="Out of memory for string array";休息;

案例 4011: err="字符串太长";休息;

案例 4012: err="零余数";休息;

案例 4013: err="除以零";休息;

案例4014:错误=“未知命令”;休息;

案例 4015: err="不正确的转换";休息;

案例 4016: err="未初始化的数组";休息;

案例 4017: err="不允许 DLL 调用";休息;

case 4018: err="无法加载库";休息;

case 4019: err="无法调用函数";休息;

case 4020: err="不允许调用外部库函数";休息;

case 4021: err="函数返回的字符串没有足够的内存";休息;

案例 4022: err="系统忙";休息;

case 4050: err="无效的函数参数个数";休息;

case 4051: err="无效的函数参数值";休息;

case 4052: err="字符串函数内部错误";休息;

案例 4053: err="数组错误";休息;

case 4054: err="错误使用时间序列数组";休息;

case 4055: err=" 自定义指标错误";休息;

case 4056: err="数组不兼容";休息;

case 4057: err="处理全局变量时出错";休息;

案例 4058: err="未找到全局变量";休息;

case 4059: err="测试模式下不允许该功能";休息;

case 4060: err="函数不允许";休息;

case 4061: err="发送邮件错误";休息;

案例 4062: err="预期字符串参数";休息;

case 4063: err="需要一个整数参数";休息;

案例 4064: err="双重预期";休息;

case 4065: err="一个数组应该作为参数";休息;

case 4066: err="请求的历史数据处于更新状态";休息;

case 4067: err="执行交易操作时出错";休息;

案例 4099: err="文件结束";休息;

case 4100: err="处理文件时出错";休息;

案例 4101: err="无效的文件名";休息;

case 4102: err="打开的文件太多";休息;

case 4103: err="无法打开文件";休息;

case 4104: err="不兼容的文件访问模式";休息;

case 4105: err="未选择订单";休息;

案例4106:错误=“未知字符”;休息;

case 4107: err="交易函数的价格参数不正确";休息;

case 4108: err="无效票号";休息;

case 4109: err="不允许交易。您必须在 EA 属性中启用允许 EA 交易选项。";休息;

case 4110: err="不允许多头。您需要检查EA属性。";休息;

case 4111: err="不允许空头。您需要检查EA属性。";休息;

case 4200: err="对象已经存在";休息;

case 4201: err="请求了一个未知的对象属性";休息;

case 4202: err="对象不存在";休息;

案例 4203: err="未知对象类型";休息;

案例 4204: err="没有对象名称";休息;

case 4205: err="对象坐标错误";休息;

case 4206: err="未找到指定的子窗口";休息;

默认值:err="使用对象时出错";

}

Alert("结束错误描述");

返回(错误);

}//结束错误描述()

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


//================================================= =================================================== ========================

int GetNext(NextTick)

//>>>>>>>>>>>>>>>>>>>>>>>>

{

Alert("求GetNext(NextTick)");

警报(NextTick);

而(刷新率()==假)计数++;

警报("Count=",Count,"NextTick=",NextTick);

警报(” ”);

警报(RefreshRates(),计数,NextTick);

返回(下一个刻度);

警报(NextTick);

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

Alert("结束 GetNext(NextTick)");

}

//结束GetNext(NextTick)

//================================================= =================================================== ========================


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

无效 OnTick()

{

//****************************************

Alert("求 OnTick");

//****************************************

FastMA=NormalizeDouble(iMA(NULL,0,Period_FastMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_FastMA=4

SlowMA=NormalizeDouble(iMA(NULL,0,Period_SlowMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_SlowMA=8

GetNext(NextTick);

Alert("NextTick=",NextTick);

Delta=NormalizeDouble(FastMA-SlowMA,Digits()); Alert("求 OnTick");

警报(三角洲,数字());

Alert("FastMA=",DoubleToStr(FastMA ,Digits()),"SlowMA=",DoubleToStr(SlowMA,Digits()), "Delta=",DoubleToStr(Delta,Digits()));

Alert("结束 OnTick");

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

}// 结束(结束 OnTick)

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<

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



//================================================= =================================================== ===========================



无效初始化()

{

警报(” ”);

Alert("请求初始化()");

警报(” ”);



StringBeg=StringConcatenate("TimeToStr(TIME_DATE,TIME_SECONDS)=",TimeToStr(TIME_DATE,TIME_SECONDS));

警报(字符串);


record=StringConcatenate("MaxTickNum=",MaxTickNum);

警报(记录);


record=StringConcatenate("k_SL=",DoubleToStr(k_SL,Digits()));

警报(记录);


record=StringConcatenate("k_TP=",DoubleToStr(k_TP,Digits()));

警报(记录);


record=StringConcatenate("k_lots=",DoubleToStr(k_lots,Digits()));

警报(记录);


警报(“结束初始化()”);


}//结束初始化()

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




//================================================= =================================================== =====================

int GetTick(NextTick)


{


Alert("求 GetTick");


而(刷新率()==假)

下一个刻度++;

Alert("NextTick=",NextTick);


OrderSelect(NextTick,SELECT_BY_TICKET);


利润=订单利润();


警报(DoubleToStr(利润,数字));


GetNext(NextTick);


Alert("结束 GetTick");

}

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


//================================================= =================================================== ==========================


诠释 NextType()

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("求 NextType");


if(OrderSelect(NextTick,SELECT_BY_TICKET)==true)

{

OpenPrice=OrderOpenPrice();

ClosePrice=OrderClosePrice();

}


if(ClosePrice>OpenPrice)CurType=OP_BUY;


否则 CurType=OP_SELL;




返回(curType);

Alert("结束 CurType()");

//>>>>>>>>>>>>>>>>>>>>>>>>>

}//"结束 CurType()";


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



//================================================= =================================================== ============================


布尔 FastMACrossUp()

{


if(!(Delta==LastDelta))Alert("Delta=",DoubleToStr(Delta,5),"LastDelta=",DoubleToStr(LastDelta,5));


Alert("LastDelta=",DoubleToStr(LastDelta,5));

警报("!(Delta==LastDelta)=",!(Delta==LastDelta));

if(((Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0)))Alert("(Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0)= " ,

(Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0));

警报("(Delta>=0)=",(Delta>=0),"(LastDelta<=0)=",(LastDelta<=0));

if(Delta!=LastDelta)Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Alert("(Delta>=0)=",(Delta>=0)," ( LastDelta<=0)=",(LastDelta<=0)," TickNum=",TickNum);

警报("(Delta>=0)=",(Delta>=0));

警报("LastDelta<=",(LastDelta<=0));

Alert("!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0))=",!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0 )));

警报(((Delta!=LastDelta)&&((Delta>=0)&&(LastDelta<=0))));

警报(" (Delta!=LastDelta)= ",(Delta!=LastDelta)," (Delta>=0)= ",(Delta>=0)," (LastDelta<=0)= ",(LastDelta<= 0));

return((Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0));

} //结束 FastMACrossUp()

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



//================================================= =================================================== ====================

布尔 FastMACrossDn()

{

if(!(Delta==LastDelta)&&(Delta<=0)&&(LastDelta>=0))Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5)) ;


Alert("LastDelta=",DoubleToStr(LastDelta,5));

警报("!(Delta==LastDelta)=",!(Delta==LastDelta));

警报("(Delta<=0)=",(Delta<=0));

Alert("LastDelta>=0",(LastDelta>=0));

if((Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0))

警报("(Delta<=0)=",(Delta<=0),"(LastDelta>=0)=",(LastDelta>=0));

Alert(" (Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0));

if(Delta!=LastDelta)Alert(" Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Alert("(Delta<=0)=",(Delta<=0)," (LastDelta>=0)=",(LastDelta>=0)," TickNum=",TickNum);

Alert(" (Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0)) );

return((Delta!=LastDelta)&&(Delta<=0)&&(LastDelta>=0));

}//结束 FastMACrossDn()

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



//================================================= =================================================== ====================================

布尔 FastMAIsAbove()

{

Alert("请求 FastMAIsAbove()");

警报(" (Delta>=0)=",(Delta>=0)," (LastDelta>=0)=",(LastDelta>=0));

if(((Delta>=0)&&(LastDelta>=0)))

Alert(" FastMA= ",DoubleToStr(FastMA,5)," SlowMA= ",DoubleToStr(SlowMA,5));

Alert(" Delta= ",DoubleToStr(Delta,5)," LastDelta= ",DoubleToStr(LastDelta,5));

Alert("结束 FastMAIsAbove()");

Alert("(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0)=",(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

Alert("结束 FastMAIsAbove()");

return((Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

}//结束 FastMAIsAbove()

//================================================= =================================================== =================


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

布尔 FastMAIsBelow()

{


return((Delta==LastDelta)&&(Delta<=0)&&(LastDelta<=0));

}//结束FastMAIsBelow()*/

"

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

//************************************************ ** *****************************************

"


 
Dmitriy Voevodkin:

Init不能以任何方式启动,它在指标/专家启动时自动启动一次,就像DeInit一样。

另外,你可以制作一个静态布尔变量,并与IsConnected() 一起使用。而当连接在一个新的tick到来时被恢复,首先必须启动它自己的初始化函数。但是IsConnected()不应该在 OnCalculate()中使用,而应该在OnTimer()中使用,我自己的初始化函数应该在OnCalculate()的最开始使用。


谢谢,我会考虑的,我只是认为已经有了典型的解决方案......。

 
buyanov:

所有代码

哇,那是一个很大的警报。
 
Mihail Marchukajtes:

谢谢,我会考虑的,我只是认为已经有了典型的解决方案......。

我已经对这个人的话写了反驳。OnItit()是一个普通函数。在你需要的时候运行它。

 
buyanov:

所有代码


我已经告诉过你--用SRC按钮附上代码。对不起,你是完全不学无术吗?

告诉我,谁会想看这块垃圾?

 
Artyom Trishkin:

我已经写过对这个人的话的反驳。OnItit()是一个通常的函数。你可以在你需要的时候运行它。


嗯,是的,我在想为什么不在你连接的时候叫它。事实证明,你可以 :-)

 
buyanov:

所有代码


注意变量类型。

扔掉所有不必要的警报

附加的文件:
test.mq4  42 kb