нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
В таком исполнении у тебя внешний цикл походу вообще работать не должен. В обоих циклах используется одна и та же переменная i, объявленная до циклов. Во внешнем она инициализируется кол-вом ордеров -1 и идет на декремент (уменьшение). А как дело доходит до внутреннего цикла так ее значение обнуляется.
У тебя перебор ордеров есть уже во внешнем цикле - зачем его дублировать еще и во внутреннем? Имхо мешанина какая-то. Бага не вижу.
нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
Раньше компилятор выдавал предупреждение при повторном объявлении переменной внутри цикла.
Но в январе-феврале этого года кто то из разрабов решил, что у прогеров слишком много свободного времени и убрал это предупреждение.
Теперь, что бы отловить ошибку приходится тратить кучу времени.
Но как говорится "жираф большой, ему видней", хотя временами очень охота подкрутить шею этому жирафу.
Раньше компилятор выдавал предупреждение при повторном объявлении переменной внутри цикла.
А причем тут повторное объявление переменных и область видимости? Переменная i объявлена за пределами (снаружи) обоих циклов, видна как во внешнем, так и во внутреннем. Другое дело что она инициализируется в обоих циклах, а индексация в них встречная.
Всем добрый день. Пытаюсь реализовать такую идею- сделки открываются по полосам Болленджера, а когда цена дошла до середины полос Болленджера, которую эмитируем скользящей средней с тем же периодом что и Болленджер. Когда дошли до Ма, то закрываем часть позиции.
Сделки открываются по сигналам полос Болленджера норм, а вот мои функции на закрытие части ордера не работают, вот код функций.
//----ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА БАЙ НА СЕРЕДИНЕ КАНАЛА НАЧАЛО---------------------------------------------------------------------------------------------+void f___close_na_centre_buy()
{
double lokal_ma= iMA(Symbol(),
Period_for_work_ma,
Period_ma,
0,Metod_ma,
Price_ma,
1
);
if(Ask== lokal_ma)
{
for(int i= OrdersTotal(); i >=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
Print("ВЫБРАЛИ ОРДЕР");
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magik_number && OrderComment()== Order_comment && OrderType()== OP_BUY)
{
Print("ПРОВЕРИЛИ ЧТО ОРДЕР НАШ");
if(OrderLots()-Close_lot> 0 && OrderLots()-Close_lot>min_lot )
{
Print("ПРОВЕРИЛИ ЧТО МОЖНО ЗАКРЫТЬ ЧАСТЬ ОРДЕРА БАЙ");
if(OrderClose(OrderTicket(), Close_lot,Ask,Slippage,clrBlack))
{
Print("\n\nЗАКРЫЛИ НА СЕРЕДИНЕ КАНАЛА ПО ОРЕДУ БАЙ №"+ string(OrderTicket())+ (string)Close_lot+" ЛОТА"+ "В РЫНКЕ ОСТАЛОСЬ "+ (string)OrderLots());
}
}
}
}
}
}
}
//-----ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА БАЙ НА СЕРЕДИНЕ КАНАЛА КОНЕЦ--------------------------------------------------------------------------------------------+//----ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА СЕЛЛ НА СЕРЕДИНЕ КАНАЛА НАЧАЛО---------------------------------------------------------------------------------------------+void f___close_na_centre_sell()
{
double lokal_ma= iMA(Symbol(),
Period_for_work_ma,
Period_ma,
0,Metod_ma,
Price_ma,
1
);
if(Bid== lokal_ma)
{
for(int i= OrdersTotal(); i >=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{Print("ВЫБРАЛИ ОРДЕР");
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magik_number && OrderComment()== Order_comment && OrderType()== OP_SELL)
{
Print("ПРОВЕРИЛИ ЧТО ОРДЕР СЕЛЛ НАШ");
if(OrderLots()-Close_lot> 0 && OrderLots()-Close_lot>min_lot ) // ПРОВЕРКА ЧТО МОЖНО ЗАКРЫТЬ ЧАСТЬ ЛОТА ОРДЕРА
{
Print("ПРОВЕРИЛИ ЧТО МОЖНО ЗАКРЫТЬ ЧАСТЬ ОРДЕРА СЕЛЛ");
if(OrderClose(OrderTicket(), Close_lot,Bid,Slippage,clrBlack))
{
Print("\n\nЗАКРЫЛИ НА СЕРЕДИНЕ КАНАЛА ПО ОРЕДУ СЕЛЛ №"+ (string)OrderTicket()+(string)Close_lot+" ЛОТА"+ "В РЫНКЕ ОСТАЛОСЬ "+ (string)OrderLots());
}
}
}
}
}
}
}
//-----ФУНКЦИЯ ЗАКРЫТИЯ ОРДЕРА СЕЛЛ НА СЕРЕДИНЕ КАНАЛА КОНЕЦ--------------------------------------------------------------------------------------------+
В журнале принтов нету- и не могу понять почему. Подскажите пожалуйста, что делаю не правильно и как это добро поправить чтобы функции начали закрывать часть лота ордера? p/sсами функции я вызвал в он тике- в этом проблемы не должно быть…
Добрый день!
В скрипте осуществляется запись данных в в песочницу Files:
string NameSettings = "abc.set"; // Формируется имя для Settings
int file_handle=FileOpen("//"+NameSettings,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
FileWriteString(file_handle,Settings+"\r\n"); // Записывается строка Settings в песочницу Files
Подскажите, пожалуйста, как осуществить эту запись непосредственно в папку тестера (она же не песочница?):
C:\Users\lizak\AppData\Roaming\MetaQuotes\Terminal\FA97EA291D4188820508F9D2B5AAD50F\MQL5\Profiles\Tester
С уважением, Александр
Стесняюсь спросить, а зачем?
Если прям очень надо, то можно линки на папки сделать где надо.
Добрый день!
...
Подскажите, пожалуйста, как осуществить эту запись непосредственно в папку тестера (она же не песочница?)
нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
В таком исполнении у тебя внешний цикл походу вообще работать не должен. В обоих циклах используется одна и та же переменная i, объявленная до циклов.
Во внешнем она инициализируется кол-вом ордеров -1 и идет на декремент (уменьшение). А как дело доходит до внутреннего цикла так ее значение обнуляется.
У тебя перебор ордеров есть уже во внешнем цикле - зачем его дублировать еще и во внутреннем? Имхо мешанина какая-то. Бага не вижу.
нашел походу баг в МЕ - в такой конструкции из - за break прерывается не только ближний (вложенный) цикл for ... но и внешний - перебора ордеров - этого быть не должно - т.е. он
все позы не переводит по модификации СЛ - но выходит из цикла перебора всех поз сразу после модификации крайней позы. Это делаю проверки для реал торгов:
(возможно надо оформлять проверки в виде ф-ии - отдельно - что модификация текущей позиции прошла успешно)
Раньше компилятор выдавал предупреждение при повторном объявлении переменной внутри цикла.
Но в январе-феврале этого года кто то из разрабов решил, что у прогеров слишком много свободного времени и убрал это предупреждение.
Теперь, что бы отловить ошибку приходится тратить кучу времени.
Но как говорится "жираф большой, ему видней", хотя временами очень охота подкрутить шею этому жирафу.
ЗЫ. говорят в четвёрке так было всегда.
Раньше компилятор выдавал предупреждение при повторном объявлении переменной внутри цикла.
Но в январе-феврале этого года кто то из разрабов решил, что у прогеров слишком много свободного времени и убрал это предупреждение.
Теперь, что бы отловить ошибку приходится тратить кучу времени.
Но как говорится "жираф большой, ему видней", хотя временами очень охота подкрутить шею этому жирафу.
ЗЫ. говорят в четвёрке так было всегда.
Думаю, что прежде, чем мучить жирафа, нужно ознакомиться с областью видимости переменных.
Думаю, что прежде, чем мучить жирафа, нужно ознакомиться с областью видимости переменных.
Вы батенька повторяетесь.
Повторюсь и я. Было нормально. Сделали плохо.Раньше компилятор выдавал предупреждение при повторном объявлении переменной внутри цикла.
А причем тут повторное объявление переменных и область видимости?
Переменная i объявлена за пределами (снаружи) обоих циклов, видна как во внешнем, так и во внутреннем.
Другое дело что она инициализируется в обоих циклах, а индексация в них встречная.
Здравствуйте, похоже, вам нужно пользоваться директивой
Спасибо за совет!
Добавил в своем скрипте директиву:
#property strict
#property script_show_inputs
//#property tester_no_cache
#property tester_file "NameSettings"
#property link "https://www.mql5.com/ru/code/26132 MultiTester - библиотека"
#property link "https://www.mql5.com/ru/code/26223 TesterCache - библиотека"
#property link "https://www.mql5.com/ru/code/16280 TypeToBytes - библиотека"
На этапе компиляции Компилятор запишет в настройках выполняемого модуля объявленные значения.
Строка string NameSettings является переменной и формируется следующим образом:
Now = TimeLocal(); // Момент формирования имени для Settings
TimeToStruct(Now,dt_struct); // Разложение момента формирования
string mnth = dt_struct.mon; // Месяц, день
string dy = dt_struct.day;
string NameSettings = mnth+dy+"-"+DoubleToString(ProfitNew,0)+".set"; // Формируется имя для Settings
int file_handle=FileOpen("//"+NameSettings,FILE_READ|FILE_WRITE|FILE_CSV|FILE_ANSI);
FileWriteString(file_handle,Settings+"\r\n"); / Записывается строка Settings в песочницу Files
В Files нужный файл записывается нормально, а в Tester никакого дубликата не появляется.
Не могли бы вы уточнить, что ещё может помочь для записи в папку Tester?
С уважением, Александр
Всем добрый день. Пытаюсь реализовать такую идею- сделки открываются по полосам Болленджера, а когда цена дошла до середины полос Болленджера, которую эмитируем скользящей средней с тем же периодом что и Болленджер. Когда дошли до Ма, то закрываем часть позиции.
Сделки открываются по сигналам полос Болленджера норм, а вот мои функции на закрытие части ордера не работают, вот код функций.
В журнале принтов нету- и не могу понять почему. Подскажите пожалуйста, что делаю не правильно и как это добро поправить чтобы функции начали закрывать часть лота ордера? p/s сами функции я вызвал в он тике- в этом проблемы не должно быть…