学习如何赚取村民的钱 [第2集] ! - 页 102 1...9596979899100101102103104105106107108109...473 新评论 [删除] 2012.09.19 19:57 #1011 问候。 也许有人对这个代码很熟悉。 //-----------------Закрытие по истории в безубыток-------------------- //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- Iteration = 0; // зануляем инерации перед их учетом в цикле по истории Sum_Loss = 0; // суммарный убыток по этим итерациям datetime Time_at_History_Current = 0, Time_at_History_Previos = 0; if(OrdersHistoryTotal() != 0) { for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--) { OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY); if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера // для последующего его анализа при подсчете количества итераций { double lastLoss = OrderProfit(); Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам Time_at_History_Current = OrderCloseTime(); } //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS)); //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS)); if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными { Time_at_History_Previos = Time_at_History_Current ; Iteration++; //Print("Iteration at History в условии сравнения = ", Iteration); } else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла { if(OrderProfit() >= 0) break; } } } } } if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам double money = Lots; BuyLots = GetBuyLotsSum(); SellLots = GetSellLotsSum(); if(BuyLots > SellLots)money = BuyLots * 10; if(BuyLots < SellLots)money = SellLots * 10; if (((AccountEquity() + Sum_Loss + (Sum_Loss / money)) >= AccountBalance()) && (((totalSell > 0) && (totalBuy < 1)) || ((totalSell < 1) && (totalBuy > 0)))) { // Достигли безубытка // Здесь какой-то код, который необходимо выполнить при достижении безубытка CloseAllBuy(); CloseAllSell(); Sum_Loss = 0.0; 我似乎无法改变这一点:当一笔交易以负数成交时,循环被打开,如果下一笔订单在零以上成交,即余额为正数,但小于负数,我们就把正数加到负数上,得到一个新的负值,这个值已经很小了。 if(OrderProfit() >= 0 && Sum_Loss < 0.0) double lastLoss_two = OrderProfit(); Sum_Loss=Sum_Loss+lastLoss_two; // считаем общий убыток по закрытым подряд убыточным ордерам Time_at_History_Current = OrderCloseTime(); } 如果它是更多的负数,根据信号,我们关闭订单并从头开始循环。 Роман 2012.09.19 22:28 #1012 belck: 你好。 也许有人熟悉这个代码。是的,这是我的代码。我已经给你写过,我在我的翻身马汀中使用了它,如下所示。 如果最后一笔交易(pose)是盈利的,那么我们将翻转次数清零(Iteration)并从起始手数开始,如果是负数。 然后计算连续亏损的交易数量,并以增加的成交量向相反方向开仓。 这是Avalanche 的净值化版本(见同名 分支),即市场订单被关闭(当在增加的交易量上逆转头寸时),相反的市场订单在更大的交易量上被打开,这取决于股票计划。下面是我的工作部分的代码。如果你有类似的exp算法,可以根据你的需要编辑它。我不明白你的问题中的任何内容。你可以在 "任何新手问题...... "中不分情况地问,只要详细说明你的问题,因为没有什么(至少对我来说)是清楚的--根本没有。 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- Iteration = 0; // зануляем инерации перед их учетом в цикле по истории Sum_Loss = 0; // суммарный убыток по этим итерациям datetime Time_at_History_Current = 0, Time_at_History_Previos = 0; if(OrdersHistoryTotal() != 0) { for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--) { OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY); if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера // для последующего его анализа при подсчете количества итераций { double lastLoss = OrderProfit(); Sum_Loss=Sum_Loss+lastLoss; // считаем общий убыток по закрытым подряд убыточным ордерам Time_at_History_Current = OrderCloseTime(); } //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS)); //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS)); if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными { Time_at_History_Previos = Time_at_History_Current ; Iteration++; //Print("Iteration at History в условии сравнения = ", Iteration); } else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла { if(OrderProfit() >= 0) break; } } } } } //Print("Iteration at History = ", Iteration, " Time_at_History_Current = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS), // " Time_at_History_Previos = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS)); //-----------------------------------------------------расчет динамического канала---------------------------- if (Symbol() == "GBPJPY" || Symbol() == "EURJPY" || Symbol() == "USDJPY" || Symbol() == "CHFJPY" || Symbol() == "NZDJPY") // || Symbol() == "XAUUSD" || Symbol() == "XAGUSD" || Symbol() == "EURGBP") StopLossPips = StopLoss; // т.к. волатильность (по АТР) другая (выше) { channel = (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*1000)*Mul_Sl; StopLossPips = NormalizeDouble(channel,0); } else { channel = 10* (iATR(Symbol(),PERIOD_D1,Period_ATR,1)*10000/3)*Mul_Sl; StopLossPips = NormalizeDouble(channel,0); } TakeProfitPips=NormalizeDouble(StopLossPips*Mul_TP,0); // расчет уровня тейка для всех инструментов по заданному значению динамического стопа // ------------------------------------------------Ищем наш ордер--------------------------------- int orderType; for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--) { if (!OrderSelect(orderIndex, SELECT_BY_POS)) continue; // если ордер не выбран, то идем на следующий открытый if(OrderCloseTime()!=0) continue; // если тикет принадлежит закрытому ордеру, то берем следующий открытый if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue; orderType = OrderType(); if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue; ticket = OrderTicket( ); // Номер ордера orderLots = OrderLots(); // Lots orderProfit = OrderProfit() + OrderSwap(); // Profit Price = OrderOpenPrice(); // Цена открытия рыночного ордера SL = OrderStopLoss(); // Значение StopLoss ордера TP = OrderTakeProfit(); // Значение TakeProfit ордера if (ticket>0) // Если позиция открылась { while(OrderSelect(ticket,SELECT_BY_TICKET)==false) // Если ордер выбран Sleep(100); double OpenPrice=OrderOpenPrice(); // Print("OrderTicket()=",OrderTicket(), "OrderOpenTime()=",OrderOpenTime()); // Print("TimeLocal()=",TimeLocal()); //---------------------Запоминаем значения сл и тп ордера if (orderType == OP_BUY) { V_StopLossPips = NormalizeDouble(OpenPrice - (StopLossPips * Point), Digits); V_TakeProfitPips = NormalizeDouble(OpenPrice + (TakeProfitPips * Point), Digits); } if (orderType == OP_SELL) { V_StopLossPips = NormalizeDouble(OpenPrice + (StopLossPips * Point), Digits); V_TakeProfitPips = NormalizeDouble(OpenPrice - (TakeProfitPips * Point), Digits); } } // Проверка на предельную просадку double loss = - ((orderProfit * 100.0) / AccountBalance()); if (loss > MaxLoss) { Print ("MaxLoss"); CloseAllOrders(MagicNumber); IsExpertFailed = true; return (0); } // Проверка закрытия открытой позиции (ордера) по стоп-лоссу if ( V_StopLossPips != 0 ) { if (orderType == OP_BUY && Bid <= V_StopLossPips) { CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); } if (OrderType()== OP_SELL && Ask >= V_StopLossPips){ CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips); } } // Проверка закрытия открытой позиции (ордера) по тейку if ( V_TakeProfitPips != 0 && MathAbs(orderProfit) > MathAbs (Sum_Loss)) { if (orderType == OP_BUY && Bid >= V_TakeProfitPips) { CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); } if (OrderType()== OP_SELL && Ask <= V_TakeProfitPips){ CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips); } } // Если тралить, то с соответствующего номера итерации при выполнении НЕОБХОДИМОГО УСЛОВИЯ соответствующим // выбранному видом трала if (UseTrailing==1) if ((Iteration >= k)&& (MathAbs(orderProfit) > (MathAbs (Sum_Loss)))) switch(type) { case 0: // простой трал по аналогии учебнику - в зависимости от параметра trlinloss (тралить ли в зоне лоссов) if (orderType == OP_BUY) SampleTrailing_texbook (0, V_StopLossPips, V_TakeProfitPips); // если бай if (orderType == OP_SELL) SampleTrailing_texbook (1, V_StopLossPips, V_TakeProfitPips); // если селл break; //трал по фракталам + отступ (Indent) case 1: TrailingByFractals_LAVINA(ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break; //трал по теням N свечей + отступ (Indent) case 2: TrailingByShadows (ticket,signal_period,Sum_Loss,Lots_New,V_StopLossPips,trlinloss); break; } P.S.你要把我所有的战斗机器人从我手中拿走,我现在正在吃。自2010年9月以来,我一直在为适当的算法而中断和退出工作。见主题--雪崩。 Роман 2012.09.19 22:29 #1013 继续在拖车中的代码,因为它比允许的尺寸大。 附加的文件: itdakxijrxj.mq4 11 kb [删除] 2012.09.20 10:53 #1014 Roman.: 是的,这是我的代码。我已经给你写过,我在我的翻身马汀中使用了它,如下所示。 如果最后一笔交易(pose)是以盈利方式结束的,那么我们就将翻转次数清零(Iteration),并从起始手数开始,如果是亏损。 我们计算出连续亏损的交易数量,并通过增加交易量向相反方向开仓。 这是Avalanche 的净值化版本(见同名 分支),即市场订单被关闭(在成交量增加时翻转位置),相反的市场订单根据股票计划在更大的成交量上被打开。下面是我的工作部分的代码。如果你有类似的exp算法,可以根据你的需要编辑它。我不明白你的问题中的任何内容。你可以在 "任何新手问题...... "分支中不分情况地提问,但要更详细地描述你的问题,因为没有什么(至少对我来说)是清楚的--根本没有。 P.S.这就是你要引出我所有的战斗机器人,我正在吃手。自2010年9月以来,我一直在为适当的算法而中断和退出工作。见主题--雪崩。 我已经在 "任何新手问题 "的主题中问过了,但大家都沉默不语。 情况是,当这段代码在损失中关闭交易时,它记住了减去的余额,而当它在加号中关闭交易时,加号小于余额,它将Sum_Loss归零,而我需要它不归零,并刈割。 所以这就是现在的工作方式。 它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到开放交易的利润超过(将超过)Sum_Loss,当达到时,交易被关闭,Sum_Loss被清零,循环重新开始。 我需要。 订单以负数收盘,其负数利润被加到Sum_Loss中,然后如果下一笔交易以正数利润收盘,Sum_Loss被减去从利润中得到的金额,这意味着下一笔开仓订单Sum_Loss已经是一个较小的金额,以此类推,直到订单利润高于Sum_Loss,然后Sum_Loss被清除,一个新的循环开始。 Sum_Loss = 0。 第一笔平仓单:利润(-50)< 0 Sum_Loss + profit (Sum_Loss + (-50)) Sum_Loss = -50。 第二笔平仓单:利润(+40)>0且Sum_Loss<0 Sum_Loss + profit (Sum_Loss + 40) Sum_Loss = -10 Роман 2012.09.20 12:58 #1015 belck: 1.我已经在 "任何初学者的问题 "的主题中讲过了,而且是沉默不语。 现在的情况是,当这段代码在亏损状态下关闭交易时,它会记住负的余额,但当它在盈利状态下关闭交易时,如果加号小于余额,它会重置Sum_Loss,但我需要它不是重置,而是减去。 2.所以,现在是这样的。 它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到未完成的交易的利润不超过(将超过)Sum_Loss,当达到时,该交易被关闭,Sum_Loss被重置,循环重新开始。 3.我需要。 订单以负数收盘,其负数利润被加到Sum_Loss中;然后如果下一笔交易以正数利润收盘,Sum_Loss就会减少从利润中获得的金额;这意味着下一笔未平仓交易将获得更小的Sum_Loss金额,以此类推,直到订单利润大于Sum_Loss,然后Sum_Loss被清除,新的循环开始。 Sum_Loss = 0。 第一笔平仓单:利润(-50)< 0 Sum_Loss + profit (Sum_Loss + (-50)) Sum_Loss = -50。 第二笔平仓单:利润(+40)>0且Sum_Loss<0 Sum_Loss + profit (Sum_Loss + 40) Sum_Loss = -10 1.再次申请--那里的人肯定会提供帮助。 之前把你的代码放在该分支中...(事实如此) 2.这是正确的,因为这是Avalanche的基本算法。 3.所有这些,并在初学者的主题中描述它与你的这个算法的代码。人们会纠正它。自己开始在mcl4上持续而安静地写代码。 如果你不能自己做,可以去第五论坛的 "工作 "部分 - 他们在那里写食物... 只有在你有个人兴趣的情况下,才会免费从头开始写代码! 一切都是。 Роман 2012.09.20 13:42 #1016 你可以呼出...:-) 这次有一大堆订单...:-)收盘时获利! DoublePlus和vse_dlya_sela_J_OsMA_kh猫头鹰+我的变体(也有TS的描述)与设置 - 在分支。 [删除] 2012.09.20 16:26 #1017 Roman.: 你可以呼出...:-) 这次有一大堆订单...:-)收盘时获利! DoublePlus和vse_dlya_sela_J_OsMA_kh猫头鹰+我的变体(也有TS的描述)与设置 - 在分支。 而你个人知道如何编程? 我不是什么程序员。 也许你还能帮我完成代码? [删除] 2012.09.20 17:07 #1018 Roman.: 你可以呼出...:-) 这次有一大堆订单...:-)收盘时获利! 而遗憾的是,在获利之前没有增加手数?:)) Роман 2012.09.20 21:39 #1019 belck: 我不是什么程序员。 也许你终究能帮我完成代码? 如果你不能自己做,请联系mql5.com的 "工作 "服务--他们会迅速完成你所有的奇思妙想。 [删除] 2012.09.20 21:40 #1020 Roman.: 这很好。 PS:除了我们,所有的交易者都在睡觉。 1...9596979899100101102103104105106107108109...473 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
问候。
也许有人对这个代码很熟悉。
我似乎无法改变这一点:当一笔交易以负数成交时,循环被打开,如果下一笔订单在零以上成交,即余额为正数,但小于负数,我们就把正数加到负数上,得到一个新的负值,这个值已经很小了。
如果它是更多的负数,根据信号,我们关闭订单并从头开始循环。
你好。
也许有人熟悉这个代码。是的,这是我的代码。我已经给你写过,我在我的翻身马汀中使用了它,如下所示。
如果最后一笔交易(pose)是盈利的,那么我们将翻转次数清零(Iteration)并从起始手数开始,如果是负数。
然后计算连续亏损的交易数量,并以增加的成交量向相反方向开仓。
这是Avalanche 的净值化版本(见同名 分支),即市场订单被关闭(当在增加的交易量上逆转头寸时),相反的市场订单在更大的交易量上被打开,这取决于股票计划。下面是我的工作部分的代码。如果你有类似的exp算法,可以根据你的需要编辑它。我不明白你的问题中的任何内容。你可以在 "任何新手问题...... "中不分情况地问,只要详细说明你的问题,因为没有什么(至少对我来说)是清楚的--根本没有。
P.S.你要把我所有的战斗机器人从我手中拿走,我现在正在吃。自2010年9月以来,我一直在为适当的算法而中断和退出工作。见主题--雪崩。
继续在拖车中的代码,因为它比允许的尺寸大。
是的,这是我的代码。我已经给你写过,我在我的翻身马汀中使用了它,如下所示。
如果最后一笔交易(pose)是以盈利方式结束的,那么我们就将翻转次数清零(Iteration),并从起始手数开始,如果是亏损。
我们计算出连续亏损的交易数量,并通过增加交易量向相反方向开仓。
这是Avalanche 的净值化版本(见同名 分支),即市场订单被关闭(在成交量增加时翻转位置),相反的市场订单根据股票计划在更大的成交量上被打开。下面是我的工作部分的代码。如果你有类似的exp算法,可以根据你的需要编辑它。我不明白你的问题中的任何内容。你可以在 "任何新手问题...... "分支中不分情况地提问,但要更详细地描述你的问题,因为没有什么(至少对我来说)是清楚的--根本没有。
P.S.这就是你要引出我所有的战斗机器人,我正在吃手。自2010年9月以来,我一直在为适当的算法而中断和退出工作。见主题--雪崩。
我已经在 "任何新手问题 "的主题中问过了,但大家都沉默不语。
情况是,当这段代码在损失中关闭交易时,它记住了减去的余额,而当它在加号中关闭交易时,加号小于余额,它将Sum_Loss归零,而我需要它不归零,并刈割。
所以这就是现在的工作方式。
它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到开放交易的利润超过(将超过)Sum_Loss,当达到时,交易被关闭,Sum_Loss被清零,循环重新开始。
我需要。
订单以负数收盘,其负数利润被加到Sum_Loss中,然后如果下一笔交易以正数利润收盘,Sum_Loss被减去从利润中得到的金额,这意味着下一笔开仓订单Sum_Loss已经是一个较小的金额,以此类推,直到订单利润高于Sum_Loss,然后Sum_Loss被清除,一个新的循环开始。
Sum_Loss = 0。
第一笔平仓单:利润(-50)< 0
Sum_Loss + profit (Sum_Loss + (-50))
Sum_Loss = -50。
第二笔平仓单:利润(+40)>0且Sum_Loss<0
Sum_Loss + profit (Sum_Loss + 40)
Sum_Loss = -10
1.我已经在 "任何初学者的问题 "的主题中讲过了,而且是沉默不语。
现在的情况是,当这段代码在亏损状态下关闭交易时,它会记住负的余额,但当它在盈利状态下关闭交易时,如果加号小于余额,它会重置Sum_Loss,但我需要它不是重置,而是减去。
2.所以,现在是这样的。
它检查一个已关闭的订单,如果已关闭的订单的利润小于零,那么这个利润将被添加到Sum_Loss中,以此类推,直到未完成的交易的利润不超过(将超过)Sum_Loss,当达到时,该交易被关闭,Sum_Loss被重置,循环重新开始。
3.我需要。
订单以负数收盘,其负数利润被加到Sum_Loss中;然后如果下一笔交易以正数利润收盘,Sum_Loss就会减少从利润中获得的金额;这意味着下一笔未平仓交易将获得更小的Sum_Loss金额,以此类推,直到订单利润大于Sum_Loss,然后Sum_Loss被清除,新的循环开始。
Sum_Loss = 0。
第一笔平仓单:利润(-50)< 0
Sum_Loss + profit (Sum_Loss + (-50))
Sum_Loss = -50。
第二笔平仓单:利润(+40)>0且Sum_Loss<0
Sum_Loss + profit (Sum_Loss + 40)
Sum_Loss = -10
1.再次申请--那里的人肯定会提供帮助。 之前把你的代码放在该分支中...(事实如此)
2.这是正确的,因为这是Avalanche的基本算法。
3.所有这些,并在初学者的主题中描述它与你的这个算法的代码。人们会纠正它。自己开始在mcl4上持续而安静地写代码。
如果你不能自己做,可以去第五论坛的 "工作 "部分 - 他们在那里写食物...
只有在你有个人兴趣的情况下,才会免费从头开始写代码!
一切都是。
你可以呼出...:-)
这次有一大堆订单...:-)收盘时获利!
DoublePlus和vse_dlya_sela_J_OsMA_kh猫头鹰+我的变体(也有TS的描述)与设置 - 在分支。
你可以呼出...:-)
这次有一大堆订单...:-)收盘时获利!
DoublePlus和vse_dlya_sela_J_OsMA_kh猫头鹰+我的变体(也有TS的描述)与设置 - 在分支。
而你个人知道如何编程?
我不是什么程序员。
也许你还能帮我完成代码?
你可以呼出...:-)
这次有一大堆订单...:-)收盘时获利!
我不是什么程序员。
也许你终究能帮我完成代码?
PS:除了我们,所有的交易者都在睡觉。