Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да думаю так будет проще, чем менять магики в сетке.
Я ищу последний ордер в сетке по тикету.(Открыть больше одного ордера на тик робот не может)
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 едениц.