возможно я заработался... но вот, помотрите друзья
вот здесь
присваивания не происходит !!!
а вот, если так :
то все нормально ! "от перемены мест слагаемых сумма иеняется " !
это MQL4....
Подчеркните или ещё как-то выделите отличия, а то их что-то не находится. И внятно объясните, зачем присваивание делать два раза?
Подчеркните или ещё как-то выделите отличия, а то их что-то не находится. И внятно объясните, зачем присваивание делать два раза?
потому что, когда присваивание делается один раз - верхние две строки,
то присваивания не происходит ! в этих элементах остаются старые данные !
вот так присваивания не происходит:
mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType; mda_OrderLots [i] = GetLotSize_SaveAccount(); mda_OrderOpenPrice [i] = d_OrderOpenPrice; mda_OrderStopLoss [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderStopLoss; mda_OrderTakeProfit [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderTakeProfit; mswa_OrderComment [i] = s_OrderComment; ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount;
а вот так, происходит:
mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType; mda_OrderLots [i] = GetLotSize_SaveAccount(); mda_OrderOpenPrice [i] = d_OrderOpenPrice; mda_OrderStopLoss [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderStopLoss; mda_OrderTakeProfit [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderTakeProfit; mswa_OrderComment [i] = s_OrderComment; ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount; mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType;
потому что, когда присваивание делается один раз - верхние две строки,
то присваивания не происходит ! в этих элементах остаются старые данные !
вот так присваивания не происходит:
а вот так, происходит:
А если так?
mda_OrderLots [i] = GetLotSize_SaveAccount(); mda_OrderOpenPrice [i] = d_OrderOpenPrice; mda_OrderStopLoss [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderStopLoss; mda_OrderTakeProfit [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderTakeProfit; mswa_OrderComment [i] = s_OrderComment; ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount; mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType;Покажите весь цикл, может дело не в этом куске кода вовсе.
Между последними 2-мя строками и верхним аналогичным присвоением явно существует некоторое действие.
Подозреваю, что это команда выхода из цикла, либо происходит выход по ошибке.
А если так?
вот функция, содержащая этот кусок кода:
bool cExpert::OpenOrder_SaveAccount(string sw_Comment) { if (!mb_OpenBuy_SaveAccount && !mb_OpenSell_SaveAccount) return(false); if (!mb_PermitToOpen) { mb_OpenBuy_SaveAccount = false; mb_OpenSell_SaveAccount = false; return(false); } OrdersTrade(mi_Magic_SaveAccount,Symbol(),MODE_DESCEND); double d_MinStop = md_StopLevel + ms32_SlippagePips * Point; int i = ms32_ExpertOrdersTotal; int s32_OrderType; double d_OrderOpenPrice; double d_OrderStopLossMin; double d_OrderStopLoss; double d_TSL_StartLevel; double d_TSL_StepLevel; double d_OrderTakeProfitMin; double d_OrderTakeProfit; double d_BreakEvenLevel; double d_BreakEvenProfitLevel; s32_OrderType = mb_OpenBuy_SaveAccount ? OP_BUY : OP_SELL; d_OrderOpenPrice = mb_OpenBuy_SaveAccount ? md_Ask : md_Bid; if (mb_OpenBuy_SaveAccount) { d_OrderStopLossMin = md_Bid - d_MinStop; d_OrderStopLoss = ms32_SL_Pips == 0 ? 0 : md_Ask - ms32_SL_Pips*Point; d_OrderStopLoss = d_OrderStopLoss == 0 ? 0 : MathMin(d_OrderStopLossMin, d_OrderStopLoss); d_OrderTakeProfitMin = md_Bid + d_MinStop; d_OrderTakeProfit = ms32_TP_Pips == 0 ? 0 : md_Ask + ms32_TP_Pips * Point; d_OrderTakeProfit = d_OrderTakeProfit == 0 ? 0 : MathMax(d_OrderTakeProfitMin, d_OrderTakeProfit); } if (mb_OpenSell_SaveAccount) { d_OrderStopLossMin = md_Ask + d_MinStop; d_OrderStopLoss = ms32_SL_Pips == 0 ? 0 : md_Bid + ms32_SL_Pips*Point; d_OrderStopLoss = d_OrderStopLoss == 0 ? 0 : MathMax(d_OrderStopLossMin, d_OrderStopLoss); d_OrderTakeProfitMin = md_Ask - d_MinStop; d_OrderTakeProfit = ms32_TP_Pips == 0 ? 0 : md_Bid - ms32_TP_Pips * Point; d_OrderTakeProfit = d_OrderTakeProfit == 0 ? 0 : MathMin(d_OrderTakeProfitMin, d_OrderTakeProfit); } string s_OrderComment = sw_Comment; double d_Lot; d_Lot = GetLotSize_SaveAccount(); if (d_Lot >= pd_MartMaxLotSaveAccount) { mb_OpenBuy_SaveAccount = false; mb_OpenSell_SaveAccount = false; Print("pd_MartMaxLotSaveAccount was exceeded"); return(false); } mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType; mda_OrderLots [i] = GetLotSize_SaveAccount(); mda_OrderOpenPrice [i] = d_OrderOpenPrice; mda_OrderStopLoss [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderStopLoss; mda_OrderTakeProfit [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderTakeProfit; mswa_OrderComment [i] = s_OrderComment; ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount; mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType; if (!_OpenOrder(i)) return(false); if (ms32a_OrderType [i] == OP_BUY) { mb_OpenBuy_SaveAccount = false; Print("Order was opened due to mb_OpenBuy_SaveAccount signal"); UpdateTradesCountsInfo(OP_BUY); } if (ms32a_OrderType [i] == OP_SELL) { mb_OpenSell_SaveAccount = false; Print("Order was opened due to mb_OpenSell_SaveAccount signal"); UpdateTradesCountsInfo(OP_SELL); } OrdersTrade(mi_Magic_SaveAccount,Symbol(),MODE_DESCEND); return(true); } //+------------------------------------------------------------------+
Между последними 2-мя строками и верхним аналогичным присвоением явно существует некоторое действие.
Подозреваю, что это команда выхода из цикла, либо происходит выход по ошибке.
нету там ничего, я проверял, остаются старые значения...
я их распечатывал после этой строчки:
ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount;
думаю какой-то баг в MQL4 при работе с памятью...
для всех этих массивов делается ArrayResize(....)...
нету там ничего, я проверял, остаются старые значения...
я их распечатывал после этой строчки:
думаю какой-то баг в MQL4 при работе с памятью...
для всех этих массивов делается ArrayResize(....)...
а так работает?:
mda_OrderStopLoss [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderStopLoss; mda_OrderTakeProfit [i] = (mb_VirtualStops || ib_SupportECN) ? 0 : d_OrderTakeProfit; mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType; mda_OrderLots [i] = GetLotSize_SaveAccount(); mda_OrderOpenPrice [i] = d_OrderOpenPrice; mswa_OrderComment [i] = s_OrderComment; ms32a_OrderMagicNumber[i] = mi_Magic_SaveAccount;переставляйте снизу вверх по одной строчке с массивом и найдёте решение Вашей задачки
нету там ничего, я проверял, остаются старые значения...
я их распечатывал после этой строчки:
думаю какой-то баг в MQL4 при работе с памятью...
для всех этих массивов делается ArrayResize(....)...
ищите баг внутри, где-то внутри функции вы портите свои глобальные массивы
mda_OrderLots [i] = GetLotSize_SaveAccount();
ищите баг внутри, где-то внутри функции вы портите свои глобальные массивы
да, друзья, так и есть ! эта хрень GetLotSize_SaveAccount() затирает заполненные елементы !!!
большое всем спасибо, звиняйте за беспокойство !!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
возможно я заработался... но вот, помотрите друзья
вот здесь
mswa_OrderSymbol [i] = Symbol(); ms32a_OrderType [i] = s32_OrderType;
присваивания не происходит !!!
а вот, если так :
то все нормально ! "от перемены мест слагаемых сумма иеняется " !
это MQL4....