新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1598 1...159115921593159415951596159715981599160016011602160316041605...1953 新评论 Igor Makanu 2021.08.24 09:54 #15971 Maxim Kuznetsov:我想补充的是,不能保证终端拥有并将提供足够的历史记录。 在上述例子中,没有提及历史 所以可以保证OrderSelect()的结果为真。 UPD: 4中的OrderSelect 工作得很好,测试了一次--对于市场订单,进入订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但正如他们所说的 "所有的脚尖都是不同的",我喜欢它--保持它。 законопослушный гражданин 2021.08.24 11:56 #15972 你好,需要提供每笔交易的缩减数据。 谁能满足一个脚本来收集这样的统计数据并以报告的形式输出? 谢谢你 Maxim Kuznetsov 2021.08.24 12:12 #15973 законопослушный гражданин:你好,需要提供每笔交易的缩减数据。谁能满足一个脚本来收集这样的统计数据并以报告的形式输出? 谢谢 for(int i=OrdersTotal()-1;i>=0;i--) { if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue; double prosad=DBL_MIN; if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue; for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) { double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() ); delta /= MarketInfo(OrderSymbol(),MODE_POINT); if (delta>prosad) prosad=delta; } PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE); } 它是 "手写的",未经测试,充满了错误:-)只需根据你的需要调整它并使用它。 Any questions from newcomers 编码帮助 问吧! законопослушный гражданин 2021.08.24 12:22 #15974 Maxim Kuznetsov: for(int i=OrdersTotal()-1;i>=0;i--) { if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue; double prosad=DBL_MIN; if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue; for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) { double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() ); delta /= MarketInfo(OrderSymbol(),MODE_POINT); if (delta>prosad) prosad=delta; } PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE); } 手写的,没有经过检查,充满了错误:-) 根据你的需要和使用情况进行调整。 谢谢你,我会努力去想办法的! Janis Ozols 2021.08.24 12:27 #15975 @Igor Makanu,非常感谢你对终端中的排序问题的回答。我可能会把它们保存为一个结构数组,然后自己分类。我的疑虑主要是因为我担心在每一次打勾时进行的这种操作会对性能产生明显的负面影响。 Alexey Viktorov 2021.08.24 13:10 #15976 Janis Ozols: @Igor Makanu,非常感谢你对终端中的排序问题的回答。我可能会把它们保存为一个结构数组,然后自己分类。怀疑主要是因为我担心在每一次打勾时进行的这种操作会对性能产生明显的负面影响。 那么,为什么要在每次打勾时进行分类?只有在条目数量改变或列表完全改变时才够用... wasol 2021.08.24 13:25 #15977 下午好 请帮助我理解为什么从导航仪下载的指标不能拖到图表上。它在目录中。 附加的文件: image002.jpg 38 kb wasol 2021.08.24 14:09 #15978 下午。如果没有将指标工具从市场上自动加载到交易终端,问题出在哪里? Artyom Trishkin 2021.08.24 17:10 #15979 Igor Makanu:在上述例子中,没有提及历史所以可以保证OrderSelect()的结果为真。UPD:OrderSelect in 4工作得非常好,我曾经测试过 - 对于市场订单,访问订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但就像他们说的 "所有的脚趾都是不同的",如果你喜欢,就保留它吧 主持人Artem没有争辩。主持人Artem正在辩论 :) Nerd Trader 2021.08.24 20:43 #15980 void OnTick() { if(isCrossing() == 1) ... if(isCrossing() == 2) ... } int isCrossing(){ double ma = iMA(NULL, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0); double low = iLow(Symbol(), g_timeFrame, 0); double high = iHigh(Symbol(), g_timeFrame, 0); if(g_barTime < iTime(NULL,g_timeFrame,0) && high > ma && Bid <= ma){ g_barTime = iTime(NULL,g_timeFrame,0); return 1; } if(g_barTime < iTime(NULL,g_timeFrame,0) && low < ma && Bid >= ma){ g_barTime = iTime(NULL,g_timeFrame,0); return 2; } return 0; } 为什么isCrossing()不返回2 呢?isCrossing() 本身有第二个if 条目,但当isCrossing()==2 时,OnTick( ) 中没有if 条目。这是什么乱七八糟的东西... 1...159115921593159415951596159715981599160016011602160316041605...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想补充的是,不能保证终端拥有并将提供足够的历史记录。
在上述例子中,没有提及历史
所以可以保证OrderSelect()的结果为真。
UPD: 4中的OrderSelect 工作得很好,测试了一次--对于市场订单,进入订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但正如他们所说的 "所有的脚尖都是不同的",我喜欢它--保持它。
你好,需要提供每笔交易的缩减数据。
谁能满足一个脚本来收集这样的统计数据并以报告的形式输出?
谢谢你
你好,需要提供每笔交易的缩减数据。
谁能满足一个脚本来收集这样的统计数据并以报告的形式输出?
谢谢
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
它是 "手写的",未经测试,充满了错误:-)只需根据你的需要调整它并使用它。
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
手写的,没有经过检查,充满了错误:-) 根据你的需要和使用情况进行调整。
谢谢你,我会努力去想办法的!
@Igor Makanu,非常感谢你对终端中的排序问题的回答。我可能会把它们保存为一个结构数组,然后自己分类。怀疑主要是因为我担心在每一次打勾时进行的这种操作会对性能产生明显的负面影响。
那么,为什么要在每次打勾时进行分类?只有在条目数量改变或列表完全改变时才够用...
在上述例子中,没有提及历史
所以可以保证OrderSelect()的结果为真。
UPD:OrderSelect in 4工作得非常好,我曾经测试过 - 对于市场订单,访问订单属性的时间....。真的是每秒数百万次,我不想去查,我想我是在和版主Artem争论,但就像他们说的 "所有的脚趾都是不同的",如果你喜欢,就保留它吧