Ниже, в конце подраздела Функция StringSubstr в скобках приведена следующая фраза: "отдельно нужно заметить, что в первом цикле for (мое примечание: очевидно, имеется в виду функция deinit(), так как больше нигде объекты не удаляются) удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены". Но в приведенном тексте эксперта вообще нет второго цикла for. Кроме того, переменная Quant_Del, к-я объявлена в функции deinit() перед циклом forинициализирован нулем, а переменная i вообще до цикла for нигде не была объявлена И так, как цикл for имеет вид
for(int k=0; k<=Quant_Del; i++) // Удаляем объекты с именами,.. ObjectDelete(Name_Del[i]); // .. имеющимися в массиве
то получается, что в приведенном выше тексте эксперта просто банально пропущено несколько строк программы.
Поэтому 1-й вопрос такой: действительно ли здесь допущен банальный пропуск нескольких строк или это настолько хитромудрая программа, что новичкам не понять ее смысл без посторонней помощи?
Далее… В той же главе того же раздела перед приведенным текстом эксперта есть ссылка на этот же эксперт (привожу его в прикрепленном файле), при нажатии на который открывается тот же эксперт в MetaElitor. Но текст этого эксперта уже другой: здесь функция deinit()имеет уже такой вид:
//--------------------------------------------------------------- 9 --int deinit() // Спец. функция deinit()
{
string Name_Del[1]; // Объявление массиваint Quant_Del=0; // Количество удаляемых объектоint Quant_Objects=ObjectsTotal(); // Cтолько всего ВСЕХ объектовArrayResize(Name_Del,Quant_Objects);// Необходимый размер массиваfor(int k=0; k<Quant_Objects; k++) // По количеству объектов
{
string Obj_Name=ObjectName(k); // Запрашиваем имя объектаstring Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 симif (Head==Prefix) // Найден объект, ..
{ // .. начинающийся с Paint_
Quant_Del=Quant_Del+1; // Колич имён к удалению
Name_Del[Quant_Del-1]=Obj_Name;//Запоминаем имя удаляемого
}
}
for(int i=0; i<=Quant_Del; i++) // Удаляем объекты с именами,.. ObjectDelete(Name_Del[i]); // .. имеющимися в массивеreturn; // Выход из deinit()
}
//-------------------------------------------------------------- 10 --
Тогда, если "скомбинировать"фразу "отдельно нужно заметить, что в первом цикле for удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены" Итекст функции deinit() последнего варианта, у меня возник 2-й вопрос:
Вопрос. Почему нельзя удалить объекты в первом цикле for, разместив функциюObjectDelete(Obj_Name) внутри оператора if?... Ну что-то типа:
int deinit() // Спец. функция deinit()
{
int Quant_Objects=ObjectsTotal(); // Cтолько всего ВСЕХ объектовfor(int k=0; k<Quant_Objects; k++) // По количеству объектов
{
string Obj_Name=ObjectName(k); // Запрашиваем имя объектаstring Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 симif (Head==Prefix) // Если найден объект, …
{ // ... начинающийся с Paint_,ObjectDelete(Obj_Name); // … то его и удаляем
} //конец if
} //конец forreturn; // Выход из deinit()
} //конец deinit//-------------------------------------------------------------- 10 --
Почему после каждого удаления "... будет изменяться общее количество объектов"?... Ведь в данном случае переменная Quant_Objects, которая и определяет общее количество объектов, получает свое значение, равное ObjectsTotal(), ЗА пределами цикла for?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
Добрый день! Сделал блок для подсчета открытых magic Buy позиций, но проблема в том, что если блок работает на разных валютных парах, то блок выдаёт результат только по однои валютной пари(последней открытой позиций). Как исправить код (не меняя magic) что-бы блок выдавал результат для каждой валютный пари?
int OpenMagicOrderCount_buy()
{
int OpenBuyOrdersCount = 0;
int OpenOrders = 0;
int cnt = 0;
OpenOrders=OrdersTotal();
for(cnt=0;cnt<OpenOrders;cnt++) // scan all orders and positions. ..
{
OrderSelect(cnt, SELECT_BY_POS);
if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == OP_BUY )
{
OpenBuyOrdersCount ++;
}
}
Print("+++++++++++++++++++++++OpenBuyOrdersCount: " + OpenBuyOrdersCount," OrderSymbol()= ", OrderSymbol());
return(OpenBuyOrdersCount);
}
Ниже, в конце подраздела Функция StringSubstr в скобках приведена следующая фраза: "отдельно нужно заметить, что в первом цикле for (мое примечание: очевидно, имеется в виду функция deinit(), так как больше нигде объекты не удаляются) удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены". Но в приведенном тексте эксперта вообще нет второго цикла for. Кроме того, переменная Quant_Del, к-я объявлена в функции deinit() перед циклом forинициализирован нулем, а переменная i вообще до цикла for нигде не была объявлена И так, как цикл for имеет вид
то получается, что в приведенном выше тексте эксперта просто банально пропущено несколько строк программы.
Поэтому 1-й вопрос такой: действительно ли здесь допущен банальный пропуск нескольких строк или это настолько хитромудрая программа, что новичкам не понять ее смысл без посторонней помощи?
Далее… В той же главе того же раздела перед приведенным текстом эксперта есть ссылка на этот же эксперт (привожу его в прикрепленном файле), при нажатии на который открывается тот же эксперт в MetaElitor. Но текст этого эксперта уже другой: здесь функция deinit()имеет уже такой вид:
Тогда, если "скомбинировать"фразу "отдельно нужно заметить, что в первом цикле for удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены" Итекст функции deinit() последнего варианта, у меня возник 2-й вопрос:
Вопрос. Почему нельзя удалить объекты в первом цикле for, разместив функциюObjectDelete(Obj_Name) внутри оператора if?... Ну что-то типа:
Почему после каждого удаления "... будет изменяться общее количество объектов"?... Ведь в данном случае переменная Quant_Objects, которая и определяет общее количество объектов, получает свое значение, равное ObjectsTotal(), ЗА пределами цикла for?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
Разверните цикл задом наперед и удаляйте сколько влезет
FAQ: Разверните цикл задом наперед и удаляйте сколько влезет
Правильно ли я Вас понял? Надо представить функцию deinit (и цикл в частности) следующим образом:
int deinit() // Спец. функция deinit()
{
int Quant_Objects=ObjectsTotal(); // Cтолько всего ВСЕХ объектовfor(int k=Quant_Objects; k>=0; k--) // По количеству объектов
{
string Obj_Name=ObjectName(k); // Запрашиваем имя объектаstring Head=StringSubstr(Obj_Name,0,6);// Извлекаем первые 6 симif (Head==Prefix) // Если найден объект, …
{ // ... начинающийся с Paint_,ObjectDelete(Obj_Name); // … то его и удаляем
} //конец if
} //конец forreturn; // Выход из deinit()
} //конец deinit//-------------------------------------------------------------- 10 --
Эти данные нужны для расчета разницу между ордерамини на покупку и ордерами на продажу.
допустим открыт один ордер на buy объемом 0,09 лота и два ордера на sell общим объемом 0,11, разница между ними будет равна 0.09-0,11=-0,02, или если возможно то разницей между их стоимостью.
Добрый день! Сделал блок для подсчета открытых magic Buy позиций, но проблема в том, что если блок работает на разных валютных парах, то блок выдаёт результат только по однои валютной пари(последней открытой позиций). Как исправить код (не меняя magic) что-бы блок выдавал результат для каждой валютный пари?
Поменять:
if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic && OrderType() == OP_BUY )
На:
if (OrderMagicNumber()==magic && OrderType() == OP_BUY )
Neo777: Как заменить стоп лосс в пунктах в советнике,на стоп лосс выше препоследней свечи?
double x = ... // Задаем на сколько пипсов вышеdouble sl = NormalizeDouble(High[1] + x * Point, Digits); // Задаем значение стоплосс на x пипсов выше предпоследней свечи
... продолжение...
Ниже, в конце подраздела Функция StringSubstr в скобках приведена следующая фраза: "отдельно нужно заметить, что в первом цикле for (мое примечание: очевидно, имеется в виду функция deinit(), так как больше нигде объекты не удаляются) удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены". Но в приведенном тексте эксперта вообще нет второго цикла for. Кроме того, переменная Quant_Del, к-я объявлена в функции deinit() перед циклом for инициализирован нулем, а переменная i вообще до цикла for нигде не была объявлена И так, как цикл for имеет вид
то получается, что в приведенном выше тексте эксперта просто банально пропущено несколько строк программы.
Поэтому 1-й вопрос такой: действительно ли здесь допущен банальный пропуск нескольких строк или это настолько хитромудрая программа, что новичкам не понять ее смысл без посторонней помощи?
Далее… В той же главе того же раздела перед приведенным текстом эксперта есть ссылка на этот же эксперт (привожу его в прикрепленном файле), при нажатии на который открывается тот же эксперт в MetaElitor. Но текст этого эксперта уже другой: здесь функция deinit()имеет уже такой вид:
Тогда, если "скомбинировать" фразу "отдельно нужно заметить, что в первом цикле for удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены" И текст функции deinit() последнего варианта, у меня возник 2-й вопрос:
Вопрос. Почему нельзя удалить объекты в первом цикле for, разместив функцию ObjectDelete(Obj_Name) внутри оператора if?... Ну что-то типа:
Почему после каждого удаления "... будет изменяться общее количество объектов"?... Ведь в данном случае переменная Quant_Objects, которая и определяет общее количество объектов, получает свое значение, равное ObjectsTotal(), ЗА пределами цикла for?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
Добрый день! Сделал блок для подсчета открытых magic Buy позиций, но проблема в том, что если блок работает на разных валютных парах, то блок выдаёт результат только по однои валютной пари(последней открытой позиций). Как исправить код (не меняя magic) что-бы блок выдавал результат для каждой валютный пари?
... продолжение...
Ниже, в конце подраздела Функция StringSubstr в скобках приведена следующая фраза: "отдельно нужно заметить, что в первом цикле for (мое примечание: очевидно, имеется в виду функция deinit(), так как больше нигде объекты не удаляются) удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены". Но в приведенном тексте эксперта вообще нет второго цикла for. Кроме того, переменная Quant_Del, к-я объявлена в функции deinit() перед циклом for инициализирован нулем, а переменная i вообще до цикла for нигде не была объявлена И так, как цикл for имеет вид
то получается, что в приведенном выше тексте эксперта просто банально пропущено несколько строк программы.
Поэтому 1-й вопрос такой: действительно ли здесь допущен банальный пропуск нескольких строк или это настолько хитромудрая программа, что новичкам не понять ее смысл без посторонней помощи?
Далее… В той же главе того же раздела перед приведенным текстом эксперта есть ссылка на этот же эксперт (привожу его в прикрепленном файле), при нажатии на который открывается тот же эксперт в MetaElitor. Но текст этого эксперта уже другой: здесь функция deinit()имеет уже такой вид:
Тогда, если "скомбинировать" фразу "отдельно нужно заметить, что в первом цикле for удалять объекты нельзя, т.к. в этом случае после каждого удаления изменится общее количество объектов и их нумерация, в результате чего некоторые имена объектов будут пропущены" И текст функции deinit() последнего варианта, у меня возник 2-й вопрос:
Вопрос. Почему нельзя удалить объекты в первом цикле for, разместив функцию ObjectDelete(Obj_Name) внутри оператора if?... Ну что-то типа:
Почему после каждого удаления "... будет изменяться общее количество объектов"?... Ведь в данном случае переменная Quant_Objects, которая и определяет общее количество объектов, получает свое значение, равное ObjectsTotal(), ЗА пределами цикла for?
P.S. Чтобы не захламлять форум, заранее благодарю за ответ
Разверните цикл задом наперед и удаляйте сколько влезет
Правильно ли я Вас понял? Надо представить функцию deinit (и цикл в частности) следующим образом:
Эти данные нужны для расчета разницу между ордерамини на покупку и ордерами на продажу.
допустим открыт один ордер на buy объемом 0,09 лота и два ордера на sell общим объемом 0,11, разница между ними будет равна 0.09-0,11=-0,02, или если возможно то разницей между их стоимостью.
ну тогда фунция OrderLots.
Добрый день! Сделал блок для подсчета открытых magic Buy позиций, но проблема в том, что если блок работает на разных валютных парах, то блок выдаёт результат только по однои валютной пари(последней открытой позиций). Как исправить код (не меняя magic) что-бы блок выдавал результат для каждой валютный пари?
Поменять:
На:
Как заменить стоп лосс в пунктах в советнике,на стоп лосс выше препоследней свечи?
Reshetov:спасибо
извиняюсь за то что не в SRC
как его вставить вот сюда