[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 99 1...9293949596979899100101102103104105106...631 新评论 Alexey Subbotin 2012.05.03 10:08 #981 Lisi4ka330: 下午好!请帮助我解决ArrayMo函数(它返回密度曲线的最大值)。 double ArrayMo(double& x[], int d=4) { double e, s=0; double m[][2]; // временный массив: // столбец 1 - количество значений // столбец 2 - значения int i, k=ArraySize(x); int n; // номер строки временного массива m int r; // количество строк во временном массиве m if (k>0) { for (i=0; i<k; i++) { e=NormalizeDouble(x[i], d); n=ArraySearchDouble(m, e); if (n<0) { r=ArrayRange(m, 0); ArrayResize(m, r+1); m[r][0]++; m[r][1]=e; } else m[n][0]++; } ArraySort(m, WHOLE_ARRAY, 0, MODE_DESCEND); s=m[0][1]; } else Print("ArrayMo(): Массив пуст!"); return(s); } 出现了以下问题。 1.创建一个临时阵列的目的是什么? m[][2] 2.不清楚临时数组的值将取自什么,因此也不清楚这个数组可能被搜索。 n=ArraySearchDouble(m, e) 3.然后一般来说,对我来说,真相是深藏不露的)))))。一旦我们确定不存在价值,我们就开始确定 "不可理解的价值 "阵列的大小。 如果能在这个故事中看到一线光明,我将非常感激))))。 我认为这个函数毕竟写得不太正确。主要原因是,在宣布之后。 double m[][2]; 这是必要的 ArrayResize(m,0); 否则(我引用) intArrayResize( 空白数组[], int new_size) 设置数组第一个维度的新大小。 如果成功,该函数返回调整大小后数组中包含的所有元素的数量,否则返回-1,数组不被调整大小。 !!!注意:在任何函数中本地声明的数组,如果被调整了大小,在函数执行后将保持不变。当函数再次被调用时,这样的数组将有一个与声明的1!!!! 不同的大小。 因此,在多次调用的情况下,该函数将 "落在过去") 关于该算法的工作原理。数组m[][2]本身就是变量x[i]的不同值的命中数的经验分布的直接表示。也就是说,数组的每个元素由两个数字组成--某个值(第一个字段)的命中率和该值本身。循环在数组m中为每个x[i]搜索相同的值,如果找到了,数字字段就被添加进去,否则就用ArrayResize()创建一个新元素,我们的x[i]就写在那里。 接下来,一旦数组被填满,我们只需要找到命中率最高的元素,即根据定义,分布x的模数。 这是由字符串完成的 ArraySort(m, WHOLE_ARRAY, 0, MODE_DESCEND); s=m[0][1]; 虽然在我看来(不确定多维数组的情况),你可以只用 s=m[ArrayMaximum(m)][1]; 总而言之,我可以说(恕我直言,该代码的作者),即使纠正了所有的缺陷,这种算法也是极其低效的,而且经常会给出错误的结果。原因是我们正在使用双数类型,这意味着x[i]值接近但仍可区分的概率相当高。当样本量比x[i]所定义的区间总数大得多(几百倍或更多)时,这可能就不那么明显了。然而,在很多情况下,如果不满足这个约束条件,会有很多错误的计算。 计算模式的更正确的方法是这样的:构建一个经验分布函数(不要与频率分布混淆),然后将其从片状线性内插到平滑,最后寻找最大导数点。这样的算法没有上面列出的缺点,即使是小规模的样本也能相当有效地工作。至少,我只需要解决在50-100个元素的样本中搜索模式的任务,并使用MQL的相当数量的间隔 - 一切都很好。唯一的缺点是,插值通常会导致计算速度的大幅下降,当然,如果我们想定性地平滑的话。 Gazunov 2012.05.03 12:07 #982 尊敬的论坛成员,你们好!我可以和谁谈谈编写EA的 问题。一个没有指标的EA,基于不在我们方向上的移动而进行翻倍。 ilunga 2012.05.03 12:17 #983 Glazunov: 尊敬的论坛成员,你们好!我可以和谁谈谈编写EA的问题。一个没有指标的EA,基于不在我们方向上的移动而进行翻倍。 这里: https://www.mql5.com/ru/job Gazunov 2012.05.03 12:37 #984 ilunga: 这里: https://www.mql5.com/ru/job 谢谢你。也许有更多的选择。 [删除] 2012.05.03 12:39 #985 Glazunov: 谢谢你。也许有更多的选择。 试着在网站搜索中输入 "马丁格尔"--你会感到惊讶的。 Gazunov 2012.05.03 13:06 #986 YOUNGA: 试着在网站搜索中输入 "马汀格尔",你会感到惊讶的 已经看过了!但我想要的东西却没有了( Alekseu Fedotov 2012.05.03 14:52 #987 Glazunov: 尊敬的论坛成员,你们好!我可以和谁谈谈编写EA的问题。一个没有指标的EA,基于不在我们方向上的移动而进行翻倍。 请看这里 https://www.mql5.com/ru/forum/136747 Delf 2012.05.03 15:00 #988 你好。我刚刚开始在MQL4。 请提供关于OrderModify 功能的建议。手册和例子显示,该功能用于拖网,即改变止损。我需要改变未平仓订单的获利,止损在开仓时没有设置,在修改时也必须保持为0 。 订单的计算和选择应该是怎样的? 最终的目标应该是这样的 if (OrderType()==OP_BUY && OrderOpenPrice()-Bid>kof*Point) //有一个买入,但它已经下降了kof { OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+tpnew*Point,0,CLR_NONE);//我们把TP移到比先前放置的低。 卖出也是如此。 谢谢你的回答。 gogent 2012.05.03 16:18 #989 再次问好 :) 如我所想,问题出现了。以下是代码。重点是,测试器上的订单是由TP关闭的,在追踪止损期间修改订单时,通过函数TP被移除。 double my_ord[31][2]; //ордера советника //[][0] Ticket //[][1] Вид операции //--------------------------------------------------------------------------------- void FindMyOrders() //ищем свои ордера(от советника) { for (int a = 0;a<32;a++) //во избежание ошибок заполняем все нулями { my_ord[a][0]=0; my_ord[a][1]=0; } int pos = 0; for(int i=0; i<32; i++) { if (Mas_Ord_New[i][8]==1) //есть ли комментарий { int num = Mas_Ord_New[i][4]; OrderSelect(SELECT_BY_TICKET, num); string str = OrderComment(); if (str == "AO Day Profiter Trade") //наш ли это комментарий { my_ord[pos][0] = num; my_ord[pos][1] = Mas_Ord_New[i][6]; //если наш, записываем Ticket и вид операции pos++; } else { } } else { } } } //--------------------------------------------------------------- void TrailStop(int ticket, int TStop) //ф-ция трейлинг стопа, TStop-расстояние в пп { int minDist = MarketInfo(symb, MODE_STOPLEVEL); if (TStop<minDist) { TStop = minDist; } else { } if (TStop>0) { OrderSelect(ticket, SELECT_BY_TICKET); if(OrderType()==OP_BUY) { if(Bid - OrderOpenPrice()>Point*TStop) { if(OrderStopLoss()<Bid-Point*TStop) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-Point*TStop, 0, 0, Blue); return; } else { } } else{ } } else if (OrderType()==OP_SELL) { if(OrderOpenPrice() - Ask>Point*TStop) { if(OrderStopLoss()>Ask + TStop*Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+Point*TStop, 0, 0, Blue); //ordertakeprofit!! return; } else { } } else { } } else { } } else { } } //-----------------------------------а это кусочек Start(), отвечающий за трейлинг стоп for (int i = 0; i<32; i++) //трейлинг стоп для наших ордеров { if (my_ord[i][0]>0) { TrailStop(my_ord[i][0], TralingStop); } else {break;} } 这意味着追踪止损没有被执行,而且在测试者的日志中没有出现错误的TP和SL的错误。那么,什么是错的呢? [删除] 2012.05.03 18:34 #990 亲爱的专业人士,请你告诉我这个问题好吗? 我在一个文本文件里有一个先前写好的一维字符串数组 EURUSD 1654.31 GBPUSD -1654.61 USDCAD 110.98 USDJPY 1180.17 假设美元兑加元的总利润发生了变化,我需要用 "美元兑加元115.64 "替换第三行。 我把这个数据读成一个一维字符串数组,但我不能只替换文本文件中的这个元素(谁能写一个函数?) 还是不费吹灰之力就把整个阵列覆盖掉比较好? 我只是有来自站在不同对上的EA的数据--每个对都有不同的字符串--当然最好是只改变一个元素。 1...9293949596979899100101102103104105106...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下午好!请帮助我解决ArrayMo函数(它返回密度曲线的最大值)。
出现了以下问题。
1.创建一个临时阵列的目的是什么?
2.不清楚临时数组的值将取自什么,因此也不清楚这个数组可能被搜索。
3.然后一般来说,对我来说,真相是深藏不露的)))))。一旦我们确定不存在价值,我们就开始确定 "不可理解的价值 "阵列的大小。
如果能在这个故事中看到一线光明,我将非常感激))))。我认为这个函数毕竟写得不太正确。主要原因是,在宣布之后。
这是必要的
否则(我引用)
!!!注意:在任何函数中本地声明的数组,如果被调整了大小,在函数执行后将保持不变。当函数再次被调用时,这样的数组将有一个与声明的1!!!! 不同的大小。
因此,在多次调用的情况下,该函数将 "落在过去")
关于该算法的工作原理。数组m[][2]本身就是变量x[i]的不同值的命中数的经验分布的直接表示。也就是说,数组的每个元素由两个数字组成--某个值(第一个字段)的命中率和该值本身。循环在数组m中为每个x[i]搜索相同的值,如果找到了,数字字段就被添加进去,否则就用ArrayResize()创建一个新元素,我们的x[i]就写在那里。
接下来,一旦数组被填满,我们只需要找到命中率最高的元素,即根据定义,分布x的模数。
这是由字符串完成的
虽然在我看来(不确定多维数组的情况),你可以只用
总而言之,我可以说(恕我直言,该代码的作者),即使纠正了所有的缺陷,这种算法也是极其低效的,而且经常会给出错误的结果。原因是我们正在使用双数类型,这意味着x[i]值接近但仍可区分的概率相当高。当样本量比x[i]所定义的区间总数大得多(几百倍或更多)时,这可能就不那么明显了。然而,在很多情况下,如果不满足这个约束条件,会有很多错误的计算。
计算模式的更正确的方法是这样的:构建一个经验分布函数(不要与频率分布混淆),然后将其从片状线性内插到平滑,最后寻找最大导数点。这样的算法没有上面列出的缺点,即使是小规模的样本也能相当有效地工作。至少,我只需要解决在50-100个元素的样本中搜索模式的任务,并使用MQL的相当数量的间隔 - 一切都很好。唯一的缺点是,插值通常会导致计算速度的大幅下降,当然,如果我们想定性地平滑的话。
这里: https://www.mql5.com/ru/job
谢谢你。也许有更多的选择。
谢谢你。也许有更多的选择。
试着在网站搜索中输入 "马汀格尔",你会感到惊讶的
已经看过了!但我想要的东西却没有了(
请看这里
https://www.mql5.com/ru/forum/136747
你好。我刚刚开始在MQL4。
请提供关于OrderModify 功能的建议。手册和例子显示,该功能用于拖网,即改变止损。我需要改变未平仓订单的获利,止损在开仓时没有设置,在修改时也必须保持为0 。
订单的计算和选择应该是怎样的?
最终的目标应该是这样的
if (OrderType()==OP_BUY && OrderOpenPrice()-Bid>kof*Point) //有一个买入,但它已经下降了kof
{
OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+tpnew*Point,0,CLR_NONE);//我们把TP移到比先前放置的低。
卖出也是如此。
谢谢你的回答。
再次问好 :)
如我所想,问题出现了。以下是代码。重点是,测试器上的订单是由TP关闭的,在追踪止损期间修改订单时,通过函数TP被移除。
这意味着追踪止损没有被执行,而且在测试者的日志中没有出现错误的TP和SL的错误。那么,什么是错的呢?亲爱的专业人士,请你告诉我这个问题好吗?
我在一个文本文件里有一个先前写好的一维字符串数组
EURUSD 1654.31
GBPUSD -1654.61
USDCAD 110.98
USDJPY 1180.17
假设美元兑加元的总利润发生了变化,我需要用 "美元兑加元115.64 "替换第三行。
我把这个数据读成一个一维字符串数组,但我不能只替换文本文件中的这个元素(谁能写一个函数?)
还是不费吹灰之力就把整个阵列覆盖掉比较好?
我只是有来自站在不同对上的EA的数据--每个对都有不同的字符串--当然最好是只改变一个元素。