А потом уже работаю с переменной NewComment, меня просто смутило что функция
StringGetCharacterвозвращает значение символа, а не сам символ, с двузначным числом в комментарии приходится
извращаться в коде. Думала есть способ проще и удобней, мало ли) Мож я просто до него не дошла.
Как вариант, номер сделки выносить, например, в начало комментария. После поиска разделителя забираем строку до разделителя StringSetCharacter.
Проверяем число символов в строке StringLen и уже конкретно увидим скольки значное число мы получили. От этого и пляшем.
Просто по логике робота, если из N ордеров, 1,2,3,4 были закрыты и существует N ордер, то надо сидеть и не жужжать, Если из N ордеров были
закрыты 1,2,3,4 и N ордер тоже был закрыт, то он должен снова открыть N ордер.
Т.е. пока существует хотябы 1 ордер в середине сетки, робот будет стараться открыть ордера пока из комментария не получит максимально
допустимый номер сделки. И отталкивается от последнего именно существующего ордера. Из N ордеров были закрыты 1,2,3, а также N-2, N-1
и N. То ордера N-2, N-1 и N надо снова открыть.
Если же сетки не существует, то робот обновляется и начинает строить новую сетку.
Поинтересуйтесь функциями StringFind() и StringSubsr().
Чтобы на одном тике несколько ордеров устанавливалось - все от вас зависит, если надо, то можно сделать, чуть подумать... Например, ту часть
кода, которая выставляет ордера поместить в цикл...
Ну проще так проще. Попадётся брокер который трёт комменты, вернётесь к этому , удачи ;)
з.ы. магик - целое число, коммент - строковый тип. ВСЕГДА операции с целыми числами ПРОЩЕ и НАДЕЖНЕЕ чем со строками
з.ы.ы. Но раз уж вы любите строки, посмотрите ф-ию StringSplit. С нею удобно в коммент множество пар-ров записать-прочитать.
заодно проще определить что коммент "уже не тот")
Просто если менять магик, то надо будет переписывать с десяток функций которые от магика работают) Это ресурсозатратней)
ABGammA: Просто если менять магик, то надо будет
переписывать с десяток функций которые от магика работают) Это ресурсозатратней)
с десяток функций? ого как всё страшно. Люблю общаться с девушками, которые так молоды и наивны в вопросах программирования )) Хотите
расскажу как это в два щелчка сделать? )
с десяток функций? ого как всё страшно. Люблю общаться с девушками, которые так молоды и наивны в вопросах программирования )) Хотите
расскажу как это в два щелчка сделать? )
Спасибо)) До меня уже дошло))) Видимо недельный недосып сказывается, чет я протупила)))Да с магиками реально проще)
Тему можно закрывать) Всем спасибо за поддержу, Вы лучшие!))
Так мило :-), Заходите почаще, у нас ещё и напитки есть :-)
А можете написать свой вариант? А то с тем что пришло мне в голову надо будет костыль писать, а хотелось бы получить более менее чистый код.
Просто для отсева в основном используется:
Тикет позиции. Уникальное число, которое присваивается каждой вновь открытой позиции. Как правило, соответствует тикету ордера, в результате которого она была открыта, за исключением случаев изменения тикета в результате служебных операций на сервере. Например, начисления свопов переоткрытием позиции. Для нахождения ордера, которым была открыта...
ABGammA: А можете написать свой
вариант? А то с тем что пришло мне в голову надо будет костыль писать, а хотелось бы получить более менее чистый код.
Про магики? Ну магики проверяются чтоб не трогать чужие ордера. Пишите функцию проверки магика, при её вызове уже всегда будет выбран ордер.
В моем случае если магики ордеров такие
5557771
5557772
...
555777NN
Где 555777 - магик эксперта
То функция просто должна проверить остаток
от деления магика ордера на магик эксперта, если он целый и >0, то значит ордер наш.
проверка что целый - приводим рез-тат (он д.б. double) к ближайшему целому, если остаток он деления одного на другое =0, значит число целое. Это
число и есть номер ордера.
Его присвоение ордеру - обратная манипуляция, сами же сделаете?
Функцию проверки магика вставляете с помощью ctrl-H вместо выражения типа OrderMagic()==Magic, которое у вас в 10-ти местах. вуаля
з.ы. на вид может показаться лишние вычисления, это бред. операции со строками и жрут больше
з.ы. в этом варианте не должно быть экспертов с магиками больше нашего. я думаю 100000 экспертов всем хватит))
Операция инкремента и декремента применяются только к переменным, к константам не применяются. Префиксныe инкремент (++i) и декремент (--k) применяются к переменной непосредственно перед использованием этой переменной в выражении. Могут возникнуть вычислительные проблемы при переносе вышеуказанного выражения из одной среды программирования в...
Про магики? Ну магики проверяются чтоб не трогать чужие ордера. Пишите функцию проверки магика, при её вызове уже всегда будет выбран
ордер. В моем случае если магики ордеров такие
5557771
5557772
...
555777NN
Где 555777 - магик эксперта
То функция просто должна проверить остаток
от деления магика ордера на магик эксперта, если он целый и >0, то значит ордер наш.
проверка что целый - приводим рез-тат (он д.б. double) к ближайшему целому, если остаток он деления одного на другое =0, значит число целое.
Это число и есть номер ордера.
Его присвоение ордеру - обратная манипуляция, сами же сделаете?
Функцию проверки магика вставляете с помощью ctrl-H вместо выражения типа OrderMagic()==Magic, которое у вас в 10-ти местах. вуаля
з.ы. на вид может показаться лишние вычисления, это бред. операции со строками и жрут больше
з.ы. в этом варианте не должно быть экспертов с магиками больше нашего. я думаю 100000 экспертов всем хватит))
А если робот использует 2 магика одновременно?) Например 1000 и 2000?) Отдельный магик на покупку, отдельный на продажу. Ладно костыль так
костыль)) Все равно это проще чем танцы со строками.
ABGammA: А если робот использует 2
магика одновременно?) Например 1000 и 2000?)
тогда для каждого возможное кол-во ордеров 999. для второго чуть больше даже.
В общем случае ко-во макс.ордеров равно минимуму
из двух : 1. расстоянию между свои магиком и ближайшим большим 2. Минимальный магик*Х при таком Х, чтобы это число было больше
нашего магика.
Спойлер - если использовать шестизначные магики - можно ничего не проверять и на всю жизнь точно хватит
ABGammA: А если робот использует 2
магика одновременно?) Например 1000 и 2000?)
Отдельный магик на покупку, отдельный на продажу.
Ладно костыль так костыль)) Все равно это проще чем танцы со строками.
Тогда функцию сделайте принимающей магик как параметр, и используйте их хоть 10 ;)
з.ы. и не костыль это, чё обзываетесь, а элементарное использование математики и свойств целых чисел, коих аж там дофига мильярдов))
Если в функцию передаются параметры разных типов, то параметр младшего типа автоматически приводится к старшему типу. Тип возвращаемого значения соответствует старшему типу.
тогда для каждого возможное кол-во ордеров 999. для второго чуть больше даже.
В общем случае ко-во макс.ордеров равно минимуму
из двух : 1. расстоянию между свои магиком и ближайшим большим 2. Минимальный магик*Х при таком Х, чтобы это число было
больше нашего магика.
Спойлер - если использовать шестизначные магики - можно ничего не проверять и на всю жизнь точно хватит
Тогда
функцию сделайте принимающей магик как параметр, и используйте их хоть 10 ;)
Ну я так и подумала, что 999 ордеров точно хватит на 1 график в сетке. Тогда отсев ордеров будет выглядеть так
Да думаю так будет проще, чем менять магики в сетке.
Я ищу последний ордер в сетке по тикету.(Открыть больше одного ордера на тик робот не может)
int Ticket = 0;
int OldTicket = 0;
string NewComment;
for(int i=0; i<=OrdersTotal()-1; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnum)
{
Ticket = OrderTicket();
if(Ticket> OldTicket)
{
OldTicket=OrderTicket();
NewComment = OrderComment();
А потом уже работаю с переменной NewComment, меня просто смутило что функция StringGetCharacter возвращает значение символа, а не сам символ, с двузначным числом в комментарии приходится извращаться в коде. Думала есть способ проще и удобней, мало ли) Мож я просто до него не дошла.
Как вариант, номер сделки выносить, например, в начало комментария. После поиска разделителя забираем строку до разделителя StringSetCharacter. Проверяем число символов в строке StringLen и уже конкретно увидим скольки значное число мы получили. От этого и пляшем.
Просто по логике робота, если из N ордеров, 1,2,3,4 были закрыты и существует N ордер, то надо сидеть и не жужжать, Если из N ордеров были закрыты 1,2,3,4 и N ордер тоже был закрыт, то он должен снова открыть N ордер.
Т.е. пока существует хотябы 1 ордер в середине сетки, робот будет стараться открыть ордера пока из комментария не получит максимально допустимый номер сделки. И отталкивается от последнего именно существующего ордера. Из N ордеров были закрыты 1,2,3, а также N-2, N-1 и N. То ордера N-2, N-1 и N надо снова открыть.
Если же сетки не существует, то робот обновляется и начинает строить новую сетку.
Поинтересуйтесь функциями StringFind() и StringSubsr().
Чтобы на одном тике несколько ордеров устанавливалось - все от вас зависит, если надо, то можно сделать, чуть подумать... Например, ту часть кода, которая выставляет ордера поместить в цикл...
Ну проще так проще. Попадётся брокер который трёт комменты, вернётесь к этому , удачи ;)
з.ы. магик - целое число, коммент - строковый тип. ВСЕГДА операции с целыми числами ПРОЩЕ и НАДЕЖНЕЕ чем со строками
з.ы.ы. Но раз уж вы любите строки, посмотрите ф-ию StringSplit. С нею удобно в коммент множество пар-ров записать-прочитать. заодно проще определить что коммент "уже не тот")
Просто если менять магик, то надо будет переписывать с десяток функций которые от магика работают) Это ресурсозатратней)
с десяток функций? ого как всё страшно. Люблю общаться с девушками, которые так молоды и наивны в вопросах программирования )) Хотите расскажу как это в два щелчка сделать? )
с десяток функций? ого как всё страшно. Люблю общаться с девушками, которые так молоды и наивны в вопросах программирования )) Хотите расскажу как это в два щелчка сделать? )
Спасибо)) До меня уже дошло))) Видимо недельный недосып сказывается, чет я протупила)))Да с магиками реально проще)
Тему можно закрывать) Всем спасибо за поддержу, Вы лучшие!))
Спасибо)) До меня уже дошло))) Видимо недельный недосып сказывается, чет я протупила)))Да с магиками реально проще)
Тему можно закрывать) Всем спасибо за поддержу, Вы лучшие!))
Так мило :-), Заходите почаще, у нас ещё и напитки есть :-)
Так мило :-), Заходите почаще, у нас ещё и напитки есть :-)
А можете написать свой вариант? А то с тем что пришло мне в голову надо будет костыль писать, а хотелось бы получить более менее чистый код. Просто для отсева в основном используется:
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicnum)
Переписываем if(OrderSymbol()==Symbol() &&( OrderMagicNumber()>=magicnum || OrderMagicNumber()<=magicnum + MaxTrades)
Но если уменьшится пользователем MaxTrades во время открытых лотов, то ф-ция будет не корректна. И придется вводить доп переменную для проверки
А можете написать свой вариант? А то с тем что пришло мне в голову надо будет костыль писать, а хотелось бы получить более менее чистый код.
Про магики? Ну магики проверяются чтоб не трогать чужие ордера. Пишите функцию проверки магика, при её вызове уже всегда будет выбран ордер. В моем случае если магики ордеров такие
5557771
5557772
...
555777NN
Где 555777 - магик эксперта
То функция просто должна проверить остаток от деления магика ордера на магик эксперта, если он целый и >0, то значит ордер наш.
проверка что целый - приводим рез-тат (он д.б. double) к ближайшему целому, если остаток он деления одного на другое =0, значит число целое. Это число и есть номер ордера.
Его присвоение ордеру - обратная манипуляция, сами же сделаете?
Функцию проверки магика вставляете с помощью ctrl-H вместо выражения типа OrderMagic()==Magic, которое у вас в 10-ти местах. вуаля
з.ы. на вид может показаться лишние вычисления, это бред. операции со строками и жрут больше
з.ы. в этом варианте не должно быть экспертов с магиками больше нашего. я думаю 100000 экспертов всем хватит))
Про магики? Ну магики проверяются чтоб не трогать чужие ордера. Пишите функцию проверки магика, при её вызове уже всегда будет выбран ордер. В моем случае если магики ордеров такие
5557771
5557772
...
555777NN
Где 555777 - магик эксперта
То функция просто должна проверить остаток от деления магика ордера на магик эксперта, если он целый и >0, то значит ордер наш.
проверка что целый - приводим рез-тат (он д.б. double) к ближайшему целому, если остаток он деления одного на другое =0, значит число целое. Это число и есть номер ордера.
Его присвоение ордеру - обратная манипуляция, сами же сделаете?
Функцию проверки магика вставляете с помощью ctrl-H вместо выражения типа OrderMagic()==Magic, которое у вас в 10-ти местах. вуаля
з.ы. на вид может показаться лишние вычисления, это бред. операции со строками и жрут больше
з.ы. в этом варианте не должно быть экспертов с магиками больше нашего. я думаю 100000 экспертов всем хватит))
А если робот использует 2 магика одновременно?) Например 1000 и 2000?)
тогда для каждого возможное кол-во ордеров 999. для второго чуть больше даже.
В общем случае ко-во макс.ордеров равно минимуму из двух : 1. расстоянию между свои магиком и ближайшим большим 2. Минимальный магик*Х при таком Х, чтобы это число было больше нашего магика.
Спойлер - если использовать шестизначные магики - можно ничего не проверять и на всю жизнь точно хватит
А если робот использует 2 магика одновременно?) Например 1000 и 2000?) Отдельный магик на покупку, отдельный на продажу. Ладно костыль так костыль)) Все равно это проще чем танцы со строками.
Тогда функцию сделайте принимающей магик как параметр, и используйте их хоть 10 ;)
з.ы. и не костыль это, чё обзываетесь, а элементарное использование математики и свойств целых чисел, коих аж там дофига мильярдов))
тогда для каждого возможное кол-во ордеров 999. для второго чуть больше даже.
В общем случае ко-во макс.ордеров равно минимуму из двух : 1. расстоянию между свои магиком и ближайшим большим 2. Минимальный магик*Х при таком Х, чтобы это число было больше нашего магика.
Спойлер - если использовать шестизначные магики - можно ничего не проверять и на всю жизнь точно хватит
Тогда функцию сделайте принимающей магик как параметр, и используйте их хоть 10 ;)if(OrderSymbol()==Symbol() &&( OrderMagicNumber()>=magicnum || OrderMagicNumber()<=magicnum + 999)
При условии что магики должны всегда отличаться минимум на 1000 едениц.