更少的代码,更多的行动......写一个EA - 页 6 12345678910 新评论 Vladimir Simakov 2019.03.12 13:41 #51 Maxim Kuznetsov:当然,我为它们分配了内存。其深度不超过计算和调试的需要。在给定的片段中,它是30,这已经足够了。如果在某个地方需要计算例如深度50的标准偏差,那么就应该增加缓存。而且,这只是为了加快计算的速度。 好的。每个人都有自己的愿景。 fxsaber 2019.03.12 14:11 #52 Vladimir Simakov:展望没有任何问题 关于交易、自动交易系统和交易策略测试的论坛 mql5语言的特点、技巧和窍门 fxsaber, 2018.02.15 11:48 我建议你尝试用MQL5编写一个具有这种交易逻辑的脚本(MQL4风格只是为了快速感知显示)。 void OnStart() { OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0)); } Vladimir Simakov 2019.03.12 18:53 #53 fxsaber: #include <Template\Objects\COrder.mqh> #include <Template\Objects\CPosition.mqh> COrder *order1,*order2; CPosition *pos1,*pos2; //---------------------------------------------------------------------- int OnInit() { order1=new COrder(NULL,ORDER_TYPE_BUY,0.2,0.0,0.0,0.0); order2=new COrder(NULL,ORDER_TYPE_SELL,0.1,0.0,0.0,0.0); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { delete order1; delete order2; delete pos1; delete pos2; } //+------------------------------------------------------------------+ void OnTick() { CheckOrder(order1,pos1); CheckOrder(order2,pos2); if (CheckPointer(pos1)&&CheckPointer(pos2)) pos1.CloseBy(pos2); if (CheckPointer(pos1)&&pos1.Control()>POSITION_MUST_CLOSE) delete pos1; if (CheckPointer(pos2)&&pos2.Control()>POSITION_MUST_CLOSE) delete pos2; } void OnTradeTransaction(const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) { if (CheckPointer(order1)) order1.TradeTransaction(trans,request,result); if (CheckPointer(order2)) order2.TradeTransaction(trans,request,result); } //----------------------------------------------------------------- void CheckOrder(COrder* &order, CPosition* &position){ if (!CheckPointer(order)) return; switch(order.Control()){ case ORDER_FULL: position=NewPosition(order); Print(position.GetTicket()," Ok"); case ORDER_REMOVE: case ORDER_ERROR: delete order;}} //------------------------------------------------------------------- CPosition* NewPosition(COrder* &order) {return CheckPointer(order)&&PositionSelectByTicket(order.GetTicket())?new CPosition():NULL;} 我不会给你看库,ex5文件在后面。 CloseBy是从头开始做的,到目前为止还没有必要,但感谢你的 "弱点",唯一剩下的就是在CloseBy之后对位置进行修改。 在未来,COrder和CPostion将有一个封装类。 附加的文件: Test.ex5 43 kb Maxim Kuznetsov 2019.03.12 19:00 #54 我将尝试用文字来解释正在做的事情 :-) 假设我们需要一个专家顾问。首先,我们需要最简单的,通过分形的交叉点和分形的尾随止损点进行交易。也就是说,在终端,它看起来像这样。 用黑色圈出的是表格的第1行。专家顾问在其算法中考虑到的那些数据。 已给出的使用案例的目的是尽可能紧凑地描述这一领域的内容,它是如何被计算的,以及与专家顾问的互补性。在这个数据的基础上进行了哪些计算。 在我看来,最容易做的事情是 1)通过命名列出这些字段,即在ENUM中列出它们 2.) 写一个简单的函数,通过ENUM的名称和条形图给专家顾问提供它们的值。对于一个普通的程序员来说,开发简单的专家顾问系统有一定的方法(明确的步骤)。 1.定义输入 2.通过编写公式来描述和完成数据;根据需要添加列 3.指定使用结果表中的哪些数据以及在哪里使用。 为了存储数据,有一个类DataFrame,它 "按列 "存储数据,提供索引访问,数据缓存和按需计算。 在这个薄板上(没有太多的代码,只有严格意义上的必要用途),我们可以开发各种专家顾问。桌子在计数,信号被接收,交易被打开。 当然,这还不够 :-)因此,该项目刚刚启动...而且没有现成的解决方案,这是个项目。这是一个刚刚诞生并正在发展的项目。 fxsaber 2019.03.12 19:13 #55 Vladimir Simakov: 谢谢你的 "弱点"。所以是一个脚本,而不是一个EA。但即使使用EA,你也完美地展示了MT4和MT5的区别。其中一个变体只有一条线。而第二个,不幸的是,失败了。 Vladimir Simakov 2019.03.12 19:20 #56 fxsaber:所以是一个脚本,而不是一个EA。但即使有了EA,你也完美地证明了MT4和MT5的区别。在其中一个变体中只有一行。来吧,CloseBy,如果你没有注意到,我有:pos1.CloseBy(pos2),其他都是开单和检查操作。在mt4中,你也需要先开两个仓位,并为其开仓提供检查。也许你也会把工作代码贴在工作室上,只是为了比较。 Vladimir Simakov 2019.03.12 19:27 #57 Maxim Kuznetsov:我将尝试用文字来解释正在做的事情 :-) 假设我们需要一个专家顾问。首先,我们需要最简单的,通过分形的交叉点和分形的尾随止损点进行交易。也就是说,在终端,它看起来像这样。 用黑色圈出的是表格的第1行。专家顾问在其算法中考虑到的那些数据。 已给出的使用案例的目的是尽可能紧凑地描述这一领域的内容,它是如何被计算的,以及与专家顾问的互补性。在这个数据的基础上进行了哪些计算。 在我看来,最容易做的事情是 1)通过命名列出这些字段,即在ENUM中列出它们 2.) 写一个简单的函数,通过ENUM的名称和条形图给专家顾问提供它们的值。对于一个普通的程序员来说,开发简单的专家顾问系统有一定的方法(明确的步骤)。 1.定义输入 2.通过编写公式来描述和增加数据;根据需要添加列 3.指定使用结果表中的哪些数据以及在哪里使用。 为了存储数据,有一个类DataFrame,它 "按列 "存储数据,提供索引访问,数据缓存和按需计算。 在此基础上(没有太多的代码,只有严格意义上的必要的使用案例),我们可以开发各种专家顾问。桌子在计数,信号被接收,交易被打开。 当然,这还不够 :-)因此,该项目刚刚启动...而且没有现成的解决方案,这是个项目。这是一个刚刚诞生并正在发展的项目。对于一般的思考,一个Ichimoku的封装类的例子,但在mql4中。 #ifndef _ICHIMOKU_ #define _ICHIMOKU_ #include <ProjectLibrary\Functions\MyLib.mqh> class CIchimoku { private: string cSymbol; ENUM_TIMEFRAMES cFrame; int cTenkan; int cKijun; int cSenkou; ENUM_TIMEFRAMES cTempFrame; int cFrameShift; public: CIchimoku(string mSymbol,ENUM_TIMEFRAMES mFrame,int mTenkan,int mKijun,int mSenkou,int mDeltaFrame=0); double Get(int mBuffer,int mShift=0); double Tenkan(int mShift=0) {return Get(MODE_TENKANSEN,mShift);} double Kijun(int mShift=0) {return Get(MODE_KIJUNSEN,mShift);} double SpanA(int mShift=0) {return Get(MODE_SENKOUSPANA,mShift);} double SpanB(int mShift=0) {return Get(MODE_SENKOUSPANB,mShift);} double Chikou(int mShift=0) {return Get(MODE_CHIKOUSPAN,mShift);} double CloudMin(int mShift=0) {return MathMin(SpanA(mShift),SpanB(mShift));} double CloudMax(int mShift=0) {return MathMax(SpanA(mShift),SpanB(mShift));} private: ENUM_TIMEFRAMES CheckFrame(); }; //-------------------------------------------------------------------------------------------------- CIchimoku::CIchimoku(string mSymbol,ENUM_TIMEFRAMES mFrame,int mTenkan,int mKijun,int mSenkou,int mFrameShift=0): cTenkan(mTenkan),cKijun(mKijun),cSenkou(mSenkou),cFrameShift(mFrameShift){ cSymbol=mSymbol==NULL?_Symbol:mSymbol; if (mFrameShift){ cTempFrame=mFrame==PERIOD_CURRENT?(ENUM_TIMEFRAMES)Period():mFrame; cFrame=::GetShiftFrame(cTempFrame,mFrameShift);} else cFrame=mFrame;} //-------------------------------------------------------------------------------------------------- ENUM_TIMEFRAMES CIchimoku::CheckFrame(void){ if (!cFrameShift) return cFrame;//>> ENUM_TIMEFRAMES frame=(ENUM_TIMEFRAMES)Period(); if (cTempFrame==frame) return cFrame;//>> else cTempFrame=frame; return ::GetShiftFrame(frame,cFrameShift);} //-------------------------------------------------------------------------------------------------------------- double CIchimoku::Get(int mBuffer,int mShift=0){ ResetLastError(); double res=iIchimoku(cSymbol,CheckFrame(),cTenkan,cKijun,cSenkou,mBuffer,mShift); return !GetLastError()?res:0.0;} #endif Maxim Kuznetsov 2019.03.12 19:33 #58 Vladimir Simakov:对于一般的思考,一个Ichimoku的封装类的例子,但在mql4中。你想为哪个Ichimoku组件做包装?最重要的是,为什么和什么类型的? 聊天? 你可以,为什么不... PS/ 你见过Excel吗?在DataFrame视图中,Ishimocks将看起来是一样的。就像其他所有的人一样...交易员实际上是用表格工作的。图表只是汇总表的部分代表(视图)。因此,这些数据应该被当作表格来处理。 从交易员的角度来看 - 什么是程序对象?这没什么。在他的实际生活中没有这样的事情。 fxsaber 2019.03.12 19:50 #59 Vladimir Simakov:来吧,CloseBy,如果你没有注意到,我有:pos1.CloseBy(pos2),其他都是开单和检查操作。 这不是它的工作方式。 在mt4中,你也需要先开两个仓位,并为其开仓提供检查。也许你也会把工作代码贴在工作室上,只是为了比较。 #include <MT4Orders.mqh> #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnStart() { OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0)); } Vladimir Simakov 2019.03.12 19:57 #60 fxsaber: 它并不像那样工作。 我写这句话是为了控制这些订单的开端。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当然,我为它们分配了内存。其深度不超过计算和调试的需要。在给定的片段中,它是30,这已经足够了。如果在某个地方需要计算例如深度50的标准偏差,那么就应该增加缓存。而且,这只是为了加快计算的速度。
展望没有任何问题
关于交易、自动交易系统和交易策略测试的论坛
mql5语言的特点、技巧和窍门
fxsaber, 2018.02.15 11:48
我建议你尝试用MQL5编写一个具有这种交易逻辑的脚本(MQL4风格只是为了快速感知显示)。
我不会给你看库,ex5文件在后面。
CloseBy是从头开始做的,到目前为止还没有必要,但感谢你的 "弱点",唯一剩下的就是在CloseBy之后对位置进行修改。
在未来,COrder和CPostion将有一个封装类。
我将尝试用文字来解释正在做的事情 :-)
假设我们需要一个专家顾问。首先,我们需要最简单的,通过分形的交叉点和分形的尾随止损点进行交易。也就是说,在终端,它看起来像这样。
用黑色圈出的是表格的第1行。专家顾问在其算法中考虑到的那些数据。
已给出的使用案例的目的是尽可能紧凑地描述这一领域的内容,它是如何被计算的,以及与专家顾问的互补性。在这个数据的基础上进行了哪些计算。
在我看来,最容易做的事情是
1)通过命名列出这些字段,即在ENUM中列出它们
2.) 写一个简单的函数,通过ENUM的名称和条形图给专家顾问提供它们的值。
对于一个普通的程序员来说,开发简单的专家顾问系统有一定的方法(明确的步骤)。
1.定义输入
2.通过编写公式来描述和完成数据;根据需要添加列
3.指定使用结果表中的哪些数据以及在哪里使用。
为了存储数据,有一个类DataFrame,它 "按列 "存储数据,提供索引访问,数据缓存和按需计算。
在这个薄板上(没有太多的代码,只有严格意义上的必要用途),我们可以开发各种专家顾问。桌子在计数,信号被接收,交易被打开。
当然,这还不够 :-)因此,该项目刚刚启动...而且没有现成的解决方案,这是个项目。这是一个刚刚诞生并正在发展的项目。
谢谢你的 "弱点"。
所以是一个脚本,而不是一个EA。但即使使用EA,你也完美地展示了MT4和MT5的区别。其中一个变体只有一条线。而第二个,不幸的是,失败了。
所以是一个脚本,而不是一个EA。但即使有了EA,你也完美地证明了MT4和MT5的区别。在其中一个变体中只有一行。
来吧,CloseBy,如果你没有注意到,我有:pos1.CloseBy(pos2),其他都是开单和检查操作。在mt4中,你也需要先开两个仓位,并为其开仓提供检查。也许你也会把工作代码贴在工作室上,只是为了比较。
:我将尝试用文字来解释正在做的事情 :-)
假设我们需要一个专家顾问。首先,我们需要最简单的,通过分形的交叉点和分形的尾随止损点进行交易。也就是说,在终端,它看起来像这样。
用黑色圈出的是表格的第1行。专家顾问在其算法中考虑到的那些数据。
已给出的使用案例的目的是尽可能紧凑地描述这一领域的内容,它是如何被计算的,以及与专家顾问的互补性。在这个数据的基础上进行了哪些计算。
在我看来,最容易做的事情是
1)通过命名列出这些字段,即在ENUM中列出它们
2.) 写一个简单的函数,通过ENUM的名称和条形图给专家顾问提供它们的值。
对于一个普通的程序员来说,开发简单的专家顾问系统有一定的方法(明确的步骤)。
1.定义输入
2.通过编写公式来描述和增加数据;根据需要添加列
3.指定使用结果表中的哪些数据以及在哪里使用。
为了存储数据,有一个类DataFrame,它 "按列 "存储数据,提供索引访问,数据缓存和按需计算。
在此基础上(没有太多的代码,只有严格意义上的必要的使用案例),我们可以开发各种专家顾问。桌子在计数,信号被接收,交易被打开。
当然,这还不够 :-)因此,该项目刚刚启动...而且没有现成的解决方案,这是个项目。这是一个刚刚诞生并正在发展的项目。
对于一般的思考,一个Ichimoku的封装类的例子,但在mql4中。
对于一般的思考,一个Ichimoku的封装类的例子,但在mql4中。
你想为哪个Ichimoku组件做包装?最重要的是,为什么和什么类型的?
聊天? 你可以,为什么不...
PS/ 你见过Excel吗?在DataFrame视图中,Ishimocks将看起来是一样的。就像其他所有的人一样...交易员实际上是用表格工作的。图表只是汇总表的部分代表(视图)。因此,这些数据应该被当作表格来处理。
从交易员的角度来看 - 什么是程序对象?这没什么。在他的实际生活中没有这样的事情。
来吧,CloseBy,如果你没有注意到,我有:pos1.CloseBy(pos2),其他都是开单和检查操作。
这不是它的工作方式。
在mt4中,你也需要先开两个仓位,并为其开仓提供检查。也许你也会把工作代码贴在工作室上,只是为了比较。
它并不像那样工作。
我写这句话是为了控制这些订单的开端。