Заработай до
50000$
на приглашении друзей
получить StartUp Bonus
от ИнстаФорекс
Вложений не требуется!
Начни торговлю
без вложений и риска
С новым STARTUP бонусом 1000$
Получи бонус
55%
от ИнстаФорекс
на каждое пополнение
Ответить в теме
Страница 1 из 2
1 Последняя ◄╝

Показаны сообщения: с 1 по 20 из 29

Тема: Оптимальный вариант реализации контроля исполнения сигнала

 Перейти в классический вид темы
     
  1. ТОП сообщений
    2018-06-15   14:57
    Лучший ответ #1
    Накопленные выплаты 1062 RUB

    Я очередной раз натыкаюсь на вопрос, который у меня уже около месяца имеется. На данный момент, я обхожусь без этого, но тем не менее хочется обсудить его и не возвраащться к этому моменту в будущем. Суть в том, что если разложить ТС на составляющие, то можно прийти к тому выводу, что любой торговый сигнал можно отследить по времени и цене на сигнальном баре. Так вот, если в какой-то момент времени нужно найти ордера в истории, что бы узнать сколько ордеров исполнилось по канкретному торговому сигналу в канкретный момент времени в идеале было бы удобно сделать комментарий типа "Время на сигнальном баре + Цена на сигнальном баре", но.. комментарии то ДЦ может затереть и такой вариант не будет 100% надёжным. Вот это касяк. Обсуждать вопрос не актуальности комментариев как таковых в МТ не стоит, т.к. это вообще отдельная тема, которая является касяком и излишеством т.к. не надёжные вещи не актуальны в применении. Так вот, я хочу обсудить как можно реализовать контроль исполнения ордеров по торговому сигналу и поиск этих ордеров в будущем. Кто как это реализовал? Теоритически, конечно, можно сделать типа ассоциативных hashtable, где время + цена будет как-то соотносится к ключом и по такому принципу находить ордера. Но это головняк. Есть вариант, если нужен лишь последний торговый сигнал запомнить время получения последнего торгового сигнала в структуру вместе с временем и ценой на сигнальном баре, ну и.. ес-нго символом, и потом искать от этого времени получения сигнала до СЕЙЧАС и проверять что нужно. Но как-то оно не гибко и абы как. А есть вариант использовать комментарии в тестере. Протестировать ТС и потом утекать с МТ на нормальную платформу. Тогда эти грабли обойдуться сами по себе и не будет лишних заморочек. Есть ли какие-нибудь нативные средства для решения этого вопроса?

    2018-06-16   15:13
    Лучший ответ #2
    Накопленные выплаты 27419 RUB

    как бы Вам объяснить задачу современного программиста... ну в общем уметь пользоваться готовыми решениями или их подстраивать под себя вот я потратил 15 минут на изучение справки MQL и 5 минут на написание кода по Вашей задаче и 5 минут на тестирование и исправление багов - итого 25 минут, мне тоже лень, но я нашел 25 минут #property copyright "IgorM" #property link "https://forexdengi.com/members/15354-igorm" #property version "1.00" #property strict #include class COrderComment { private: CArrayString str,number; public: //----------------------------------------------------------------- void Set(int ticket,string comment){ str.Add(comment); number.Add(IntegerToString(ticket)); } //----------------------------------------------------------------- string Get(int ticket){ string res="",stmp = IntegerToString(ticket); for(int i=0;istring-->int, хотите самостоятельно напишите с нуля все это как пользоваться?, ну в принципе элементарно Ватсон (с) string comm = "Очень важная информация!!!! Это коментарий к ордеру и к сигналу!!! "; int TICKET=OrderSend(Symbol(),OP_BUY, Lot, Price,Slippage,SL,TP,comm,magic_,0,col); if(TICKET==-1)Print("Ошибка № ",GetLastError()," при открытиии ордера"); else mycomment.Set(TICKET,comm); PS:результат работы скрипта: 2018.06.16 15:18:21.899 Script string EURUSD,Daily: removed 2018.06.16 15:18:21.896 string EURUSD,Daily: uninit reason 0 2018.06.16 15:18:21.896 string EURUSD,Daily: 5 : comment# 5 2018.06.16 15:18:21.896 string EURUSD,Daily: 4 : comment# 4 2018.06.16 15:18:21.896 string EURUSD,Daily: 3 : comment# 3 2018.06.16 15:18:21.896 string EURUSD,Daily: 2 : comment# 2 2018.06.16 15:18:21.896 string EURUSD,Daily: 1 : comment# 1 2018.06.16 15:18:21.896 string EURUSD,Daily: 5 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 4 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 3 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 2 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 1 : 2018.06.16 15:18:21.896 string EURUSD,Daily: Удалил.... 2018.06.16 15:18:21.896 string EURUSD,Daily: 7 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 6 : 2018.06.16 15:18:21.896 string EURUSD,Daily: 5 : comment# 5 2018.06.16 15:18:21.896 string EURUSD,Daily: 4 : comment# 4 2018.06.16 15:18:21.896 string EURUSD,Daily: 3 : comment# 3 2018.06.16 15:18:21.896 string EURUSD,Daily: 2 : comment# 2 2018.06.16 15:18:21.896 string EURUSD,Daily: 1 : comment# 1 2018.06.16 15:18:21.895 string EURUSD,Daily: initialized 2018.06.16 15:18:21.871 Script string EURUSD,Daily: loaded successfully

    2018-06-16   13:18
    Лучший ответ #3
    Накопленные выплаты 1062 RUB

    С какими такими? 2 или 3 цифры записать это много что-ли? Да ладно..

    2018-06-16   08:47
    Лучший ответ #4
    Накопленные выплаты 27419 RUB

    а попробуйте представить, что нет и никогда не было такой возможности в МТ? - так легче будет ну и не проблема поискать сервер на котором брокер не модифицирует поле комментария и пользоваться раз сильно хочется ну и опять же к моему пред.сообщению п.3: используйте библиотеку классов из поставки МТ4: "Класс CArrayString является классом динамического массива переменных типа string" не вижу проблемы для написания собственной функции работы с комментариями ордера, может напишу в качестве баловста, но проверять работоспособность лень

    2018-06-16   02:54
    Лучший ответ #5
    Накопленные выплаты 1062 RUB

    Временная метка будет совпадать. Я этот момент обмозговывал не один час. Это единственный момент верный. Я же беру не то время, которое на формирующемся баре, а то, которое на сформированном баре заданного торгового инструмента, по которому только один сигнал может быть. Поэтому там вариантов нет. А вот как тикет 100% получить вопрос открытый.. Если ждать получения тикета и застрять в функции открытия ордера, тогда как-бы всё просто. Но в плане быстродействия и адекватности это полная нелепость. Я всегда всё люто оптимизирую. Код должен работать не любом ТФ молниеносно, а не выжидать с моря погоды))

    2018-06-15   22:41
    Лучший ответ #6
    Накопленные выплаты 1062 RUB

    Не совсем так. Но в этом есть определённый смысл. Ведь комментарии в МТ это не имеющее смыслом поле. А по поводу 3-пунктов не всё так однозначно. Вот что получается: Послали ордер лотом 1$. Например, исполнение не полное. Исполнилась сделка лотом 0.20$. Остаётся исполнить 0.80$. Но то, что осталось исполнить мы по факту узнаем только перебрав ордера т.к. это будет гарантией. Ну а узнать к какому из сигналов принадлежит определённый ордер вариантов нет т.к. мы в комментарий если и запишем, то ДЦ может перезатереть. Ну и что тогда мы будем записывать в файл, масив и тд? И вообще, нафига что-то записывать куда-то если есть комментарий, который мог играть удобную роль?

  2. Линк #1 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Я очередной раз натыкаюсь на вопрос, который у меня уже около месяца имеется. На данный момент, я обхожусь без этого, но тем не менее хочется обсудить его и не возвраащться к этому моменту в будущем.
    Суть в том, что если разложить ТС на составляющие, то можно прийти к тому выводу, что любой торговый сигнал можно отследить по времени и цене на сигнальном баре. Так вот, если в какой-то момент времени нужно найти ордера в истории, что бы узнать сколько ордеров исполнилось по канкретному торговому сигналу в канкретный момент времени в идеале было бы удобно сделать комментарий типа "Время на сигнальном баре + Цена на сигнальном баре", но.. комментарии то ДЦ может затереть и такой вариант не будет 100% надёжным. Вот это касяк. Обсуждать вопрос не актуальности комментариев как таковых в МТ не стоит, т.к. это вообще отдельная тема, которая является касяком и излишеством т.к. не надёжные вещи не актуальны в применении.
    Так вот, я хочу обсудить как можно реализовать контроль исполнения ордеров по торговому сигналу и поиск этих ордеров в будущем. Кто как это реализовал?
    Теоритически, конечно, можно сделать типа ассоциативных hashtable, где время + цена будет как-то соотносится к ключом и по такому принципу находить ордера. Но это головняк.
    Есть вариант, если нужен лишь последний торговый сигнал запомнить время получения последнего торгового сигнала в структуру вместе с временем и ценой на сигнальном баре, ну и.. ес-нго символом, и потом искать от этого времени получения сигнала до СЕЙЧАС и проверять что нужно. Но как-то оно не гибко и абы как.
    А есть вариант использовать комментарии в тестере. Протестировать ТС и потом утекать с МТ на нормальную платформу. Тогда эти грабли обойдуться сами по себе и не будет лишних заморочек.
    Есть ли какие-нибудь нативные средства для решения этого вопроса?


  3. post_thanks Получено лайков: 5

    Незарегистрированный (5 пользователей)

  4. Линк #2 Свернуть пост
    Свой человек
    АнтонР85 хорошая репутация АнтонР85 хорошая репутация АнтонР85 хорошая репутация Аватар для АнтонР85
    Регистрация:
    30.06.2016
    Пол:
    Мужчина
    Сообщений:
    622
    Деньги за посты (Подробнее):
    18083 RUB
    Поставил лайков:
    151
    Получено лайков:  272
    в 219 сообщениях
    44%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Так вот, если в какой-то момент времени нужно найти ордера в истории, что бы узнать сколько ордеров исполнилось по канкретному торговому сигналу в канкретный момент времени в идеале было бы удобно сделать комментарий типа "Время на сигнальном баре + Цена на сигнальном баре", но.. комментарии то ДЦ может затереть и такой вариант не будет 100% надёжным. Вот это касяк. Обсуждать вопрос не актуальности комментариев как таковых в МТ не стоит, т.к. это вообще отдельная тема, которая является касяком и излишеством т.к. не надёжные вещи не актуальны в применении.
    Возможно вам нужно организовать свой "журнал учета ордеров" в виде текстового файла, в который при открытие, либо модификаций, делать соответствующую запись. Информацию об ордере можно будет посмотреть в блокноте, либо считать программно(например тикет, либо дату) для дальнейших действий.


  5. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  6. Линк #3 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от АнтонР85 Посмотреть сообщение
    Возможно вам нужно организовать свой "журнал учета ордеров" в виде текстового файла, в который при открытие, либо модификаций, делать соответствующую запись. Информацию об ордере можно будет посмотреть в блокноте, либо считать программно(например тикет, либо дату) для дальнейших действий.
    Я об этому думал. Но это головняк. На ровном месте пачка работы. Хотя можно было нативно комфортно работать с комментариями. Я думаю нужно забить и тестировать логику без подобных вариантов (частичного заполнения). А дальше то, что даёт ожидаемый результат переписывать на нормальную платформу типа нинзи, мультичартса или на дукаскопи(JForex). Ведь нет резона решать касяки, которые не додумали разработчики. Деньги это не прнесёт. Поэтому проще воспользоваться единственным, что у них есть положительным, это тестер стратегий. А всё профитное переносить..


  7. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  8. Линк #4 Свернуть пост
    Свой человек
    АнтонР85 хорошая репутация АнтонР85 хорошая репутация АнтонР85 хорошая репутация Аватар для АнтонР85
    Регистрация:
    30.06.2016
    Пол:
    Мужчина
    Сообщений:
    622
    Деньги за посты (Подробнее):
    18083 RUB
    Поставил лайков:
    151
    Получено лайков:  272
    в 219 сообщениях
    44%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Я об этому думал. Но это головняк. На ровном месте пачка работы. Хотя можно было нативно комфортно работать с комментариями. Я думаю нужно забить и тестировать логику без подобных вариантов (частичного заполнения). А дальше то, что даёт ожидаемый результат переписывать на нормальную платформу типа нинзи, мультичартса или на дукаскопи(JForex). Ведь нет резона решать касяки, которые не додумали разработчики. Деньги это не прнесёт. Поэтому проще воспользоваться единственным, что у них есть положительным, это тестер стратегий. А всё профитное переносить..
    Как говориться наше дело предложить, а решать вам.


  9. Линк #5 Свернуть пост
    Свой человек
    Все пучком
     
    IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация Аватар для IgorM
    Регистрация:
    09.05.2011
    Пол:
    Мужчина
    Сообщений:
    798
    Деньги за посты (Подробнее):
    27419 RUB
    Поставил лайков:
    233
    Получено лайков:  704
    в 407 сообщениях
    88%
    странный топик, сложилось ощущение что топикстартер создал топик, чтобы сказать МТ плохой, я уйду к Нинзе....
    ну а по сабжу:
    1. запись в файл
    2. запись в глобальные переменные терминала
    3. запись в массивы и организация записи и чтения массивов при денинициализации/инициализации эксперта
    по п. 3 в большая часть уже реализована в классах из поставки МТ


  10. Линк #6 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Не совсем так. Но в этом есть определённый смысл. Ведь комментарии в МТ это не имеющее смыслом поле. А по поводу 3-пунктов не всё так однозначно. Вот что получается:
    Послали ордер лотом 1$. Например, исполнение не полное. Исполнилась сделка лотом 0.20$. Остаётся исполнить 0.80$. Но то, что осталось исполнить мы по факту узнаем только перебрав ордера т.к. это будет гарантией. Ну а узнать к какому из сигналов принадлежит определённый ордер вариантов нет т.к. мы в комментарий если и запишем, то ДЦ может перезатереть. Ну и что тогда мы будем записывать в файл, масив и тд? И вообще, нафига что-то записывать куда-то если есть комментарий, который мог играть удобную роль?


  11. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  12. Линк #7 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Ну а узнать к какому из сигналов принадлежит определённый ордер вариантов нет т.к. мы в комментарий если и запишем, то ДЦ может перезатереть.
    Варианты есть всегда... Просто кто-то их видит, а кто-то нет.
    Например... Если уж так сильно нужно иметь временные метки, то что мешает сохранить временную метку в мейджик?


  13. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  14. Линк #8 Свернуть пост
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,457
    Деньги за посты (Подробнее):
    44887 RUB
    Поставил лайков:
    262
    Получено лайков:  531
    в 483 сообщениях
    36%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Не совсем так. Но в этом есть определённый смысл. Ведь комментарии в МТ это не имеющее смыслом поле. А по поводу 3-пунктов не всё так однозначно. Вот что получается:
    Послали ордер лотом 1$. Например, исполнение не полное. Исполнилась сделка лотом 0.20$. Остаётся исполнить 0.80$. Но то, что осталось исполнить мы по факту узнаем только перебрав ордера т.к. это будет гарантией. Ну а узнать к какому из сигналов принадлежит определённый ордер вариантов нет т.к. мы в комментарий если и запишем, то ДЦ может перезатереть. Ну и что тогда мы будем записывать в файл, масив и тд? И вообще, нафига что-то записывать куда-то если есть комментарий, который мог играть удобную роль?
    Если ты ведёшь учёт ордеров, то сразу посте того, как ты получил тикет открытого ордера, проверяешь его, на соответствие открытого объёма, требуемому открываемому, то без перебора ордеров, уже можешь достоверно знать, что открыта только часть позиции.
    В этом случае нет никаких сложностей с поиском и сохранением информации, в том числе и комментированием.
    Появление, нового ордера, по инструменту, без команды на открытие позиции, и ещё несколько изменений, и будет, событием, которое закончит процесс открытия позиции в полном объёме.

    Ну и что тогда мы будем записывать в файл, масив и тд?
    А то что я тебе написал словами, то и можешь записать в файл, масив и тд, потому что в стандартном коментарри метавотовцы выделили только 32 символа, и весь эпос естественно туда не влезет. Да и нужен ли он там?

    Формат записи например <Идентификатор сигнала><Объём><другая необходимая информация>...

    В общем не стесняйся, фантазируй.

    P.S.
    И помни!!!
    Временная метка сигнала, может существенно не совпадать с временной меткой позиции.
    Возможно понадобиться дополнительная и идентификация.
    Что и как, при этом надо делать, придумай сам.

    Последний раз редактировалось MonyaMaker; 16.06.2018 в 01:10.

  15. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  16. Линк #9 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Если ты ведёшь учёт ордеров, то сразу посте того, как ты получил тикет открытого ордера, проверяешь его, на соответствие открытого объёма, требуемому открываемому, то без перебора ордеров, уже можешь достоверно знать, что открыта только часть позиции.
    В этом случае нет никаких сложностей с поиском и сохранением информации, в том числе и комментированием.
    Появление, нового ордера, по инструменту, без команды на открытие позиции, и ещё несколько изменений, и будет, событием, которое закончит процесс открытия позиции в полном объёме.
    Ну так не факт, что мгновенно всё исполнится. Это же не локальный расчёт. Нужно понимать, что может исполниться сразу, а может несколько секунд исполняться. Изначально как по мне резонно проверить, установился ли ордер. Если установился бот дальше работает.. А потом хз какой ордер какой. Да, если ордер один, то всё элементарно. Можно пробежаться по ордерам от последнего до времени последнего сигнала. А если их пачка, когда поза дробится изначально, то тут возникает вопрос. Если изначально тике не получен во время установки, потом хз какой тикет какой размер имеет уже. Вот в чём сложность.

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    А то что я тебе написал словами, то и можешь записать в файл, масив и тд, потому что в стандартном коментарри метавотовцы выделили только 32 символа, и весь эпос естественно туда не влезет. Да и нужен ли он там?
    Формат записи например <Идентификатор сигнала><Объём><другая необходимая информация>...
    В общем не стесняйся, фантазируй.
    Куда записать не вопрос, главное что.. Я выше описал, что не всегда известиен определённый тикет. Например, послыаем ордер:
    PHP код:
    while (cnt < m_tryCount && !IsStopped()) {
    if (!
    sent) {
    sent = OrderSend(m_request, m_result);
    Sleep(250); cnt++; continue;
    }
    if (
    m_result.retcode == TRADE_RETCODE_DONE) {
    if (
    m_result.order > 0 && m_result.volume == lot) {
    //lastSignal.isRealized = true;
    break;
    }
    m_request.volume = lot - m_result.volume;
    // ЗАПИСЬ В ФАЙЛ ДАННЫХ ИСПОЛНЕНИЯ ОРДЕРА
    }
    Проверил я что ордер установлен TRADE_RETCODE_DONE и дальше пошёл.. Т.к. ждать того же тикета не будешь. Ведь это тоже время.. Можно что-то пропарить, если будешь ждать. В тестере у меня конструкция такая как видно в приложенном коде работает, но на реале хз как будет работать. В 4-ке таких моментов не возникало т.к. там изначально тикет получается, если исполняется приказ. А здесь немало вариантов.

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    P.S.
    И помни!!!
    Временная метка сигнала, может существенно не совпадать с временной меткой позиции.
    Возможно понадобиться дополнительная и идентификация.
    Что и как, при этом надо делать, придумай сам.
    Временная метка будет совпадать. Я этот момент обмозговывал не один час. Это единственный момент верный. Я же беру не то время, которое на формирующемся баре, а то, которое на сформированном баре заданного торгового инструмента, по которому только один сигнал может быть. Поэтому там вариантов нет. А вот как тикет 100% получить вопрос открытый.. Если ждать получения тикета и застрять в функции открытия ордера, тогда как-бы всё просто. Но в плане быстродействия и адекватности это полная нелепость. Я всегда всё люто оптимизирую. Код должен работать не любом ТФ молниеносно, а не выжидать с моря погоды))


  17. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  18. Линк #10 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    Варианты есть всегда... Просто кто-то их видит, а кто-то нет.
    Например... Если уж так сильно нужно иметь временные метки, то что мешает сохранить временную метку в мейджик?
    Тогда будет пачка различных меджиков. Придётся что-то тоже мутить. У меня библиотека, которая высчитывает меджик из пачки параметров, что бы совки не мешали друг другу работя на разных ТФ и разных торговых инструментах. Можно конечно прилепить метку в конец или в начало, но цену.. Цену тоже придётся прилепить. Его ещё больше раздует..


  19. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  20. Линк #11 Свернуть пост
    Специалист
    ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация ir0407 отличная репутация Аватар для ir0407
    Регистрация:
    02.12.2010
    Сообщений:
    6,975
    Деньги за посты (Подробнее):
    155746 RUB
    Поставил(а) лайков:
    906
    Получено лайков:  7,116
    в 3,382 сообщениях
    102%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Тогда будет пачка различных меджиков.
    А какая разница сколько там будет мейджиков? Мейджик же уже будет не мейджик, а временнАя метка сигнала.


    Цитата Сообщение от скальпер Посмотреть сообщение
    Цену тоже придётся прилепить.
    Ну а цену-то зачем лепить? Неужели ее из ордера получить нельзя?


    Цитата Сообщение от скальпер Посмотреть сообщение
    У меня библиотека, которая высчитывает меджик из пачки параметров, что бы совки не мешали друг другу работя на разных ТФ и разных торговых инструментах. Можно конечно прилепить метку в конец или в начало, но цену..
    С такими запросами тебе не то что мейджика, никакого коммента не хватит. В таком случае одна дорога - лепить собственную систему учета ордеров и всей совокупной к ним инфы.


  21. Линк #12 Свернуть пост
    Кандидат форумных наук
    MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация MonyaMaker хорошая репутация Аватар для MonyaMaker
    Регистрация:
    03.04.2017
    Пол:
    Мужчина
    Сообщений:
    1,457
    Деньги за посты (Подробнее):
    44887 RUB
    Поставил лайков:
    262
    Получено лайков:  531
    в 483 сообщениях
    36%
    Цитата Сообщение от скальпер Посмотреть сообщение

    ================================================== ========================
    Ну так не факт, что мгновенно всё исполнится. Это же не локальный расчёт. Нужно понимать, что может исполниться сразу, а может несколько секунд исполняться.
    А никто на это и не рассчитывает, но но меры всё равно принять надо.

    Изначально как по мне резонно проверить, установился ли ордер.
    Я бы для начала "зафиксировал" сигнал по которому устанавливается ордер, чтобы повторно с ним не работать и проконтролировать до
    логического завершения обработку.

    Если установился, бот дальше работает.
    То проверил соответствие расчётных данных, данным в открытом ордере, и сразу эту информацию разместил в правильное место.
    Или обработал ошибку, правда метод m_result я бы напильником доработал. Ну не нравиться он мне.

    А потом хз какой ордер какой. А если их пачка, когда поза дробится изначально, то тут возникает вопрос.
    После правильных действий, знал бы с каким ордером надо продолжить работу, а с каким уже работа закончена. Даже если их пачка.

    Ты изначально определись сам, какие данные, и в каком виде, тебе нужны для реализации твоей задачи,
    где ты и как их будешь хранить, обновлять и когда удалять.

    Куда записать не вопрос, главное что.. Я выше описал, что не всегда известиен определённый тикет. Например, послыаем ордер:
    PHP код:
    while (cnt < m_tryCount && !IsStopped()) {
    if (!
    sent) {
    sent = OrderSend(m_request, m_result);
    Sleep(250); cnt++; continue;
    }
    if (
    m_result.retcode == TRADE_RETCODE_DONE) {
    if (
    m_result.order > 0 && m_result.volume == lot) {
    //lastSignal.isRealized = true;
    break;
    }
    m_request.volume = lot - m_result.volume;
    // ЗАПИСЬ В ФАЙЛ ДАННЫХ ИСПОЛНЕНИЯ ОРДЕРА
    }
    Проверил я что ордер установлен TRADE_RETCODE_DONE и дальше пошёл.. Т.к. ждать того же тикета не будешь. Ведь это тоже время.. Можно что-то пропарить, если будешь ждать. В тестере у меня конструкция такая как видно в приложенном коде работает, но на реале хз как будет работать. В 4-ке таких моментов не возникало т.к. там изначально тикет получается, если исполняется приказ. А здесь немало вариантов.
    Про тестер и что на нём всё чудесно, оставлю без комментария.
    Чужой код, потёмки.

    Временная метка будет совпадать.
    Не, она конечно может совпадать, но такли это будет на самом деле? А не в твоём воображении.

    Я этот момент обмозговывал не один час.
    А после обмозговывания проверил кодом, не в тестере, как на самом деле работает?

    ....по которому только один сигнал может быть.
    Тут ничего не могу сказать, хотя есть доля скепсиса.

    Если ждать получения тикета и застрять в функции открытия ордера, тогда как-бы всё просто.
    А ты не жди, поставь в очередь, потом по сигналу, ранее зафиксированному, проверишь, есть на него ордер, или нет.
    Проверь по нужным параметрам или нет.

    Но в плане быстродействия и адекватности это полная нелепость.
    И в чём это проявляется? Ты ж сам этот процесс организовываешь.

    Я всегда всё люто оптимизирую.
    И помогает?

    Код должен работать не любом ТФ молниеносно, а не выжидать с моря погоды
    Причём тут таймфремы?
    Как напишешь, так и будет работать.

    Ладно, не обращай внимания.


  22. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  23. Линк #13 Свернуть пост
    Свой человек
    Все пучком
     
    IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация Аватар для IgorM
    Регистрация:
    09.05.2011
    Пол:
    Мужчина
    Сообщений:
    798
    Деньги за посты (Подробнее):
    27419 RUB
    Поставил лайков:
    233
    Получено лайков:  704
    в 407 сообщениях
    88%
    Цитата Сообщение от скальпер Посмотреть сообщение
    И вообще, нафига что-то записывать куда-то если есть комментарий, который мог играть удобную роль?
    а попробуйте представить, что нет и никогда не было такой возможности в МТ? - так легче будет
    ну и не проблема поискать сервер на котором брокер не модифицирует поле комментария и пользоваться раз сильно хочется
    ну и опять же к моему пред.сообщению п.3:
    используйте библиотеку классов из поставки МТ4: "Класс CArrayString является классом динамического массива переменных типа string"
    не вижу проблемы для написания собственной функции работы с комментариями ордера, может напишу в качестве баловста, но проверять работоспособность лень


  24. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  25. Линк #14 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от ir0407 Посмотреть сообщение
    А какая разница сколько там будет мейджиков? Мейджик же уже будет не мейджик, а временнАя метка сигнала.
    Ну я перед сном подумал. Согласен. Здесь всё просто. Идём дальше..

    Цитата Сообщение от ir0407 Посмотреть сообщение
    Ну а цену-то зачем лепить? Неужели ее из ордера получить нельзя?
    Оно как-бы и можно теоритически, но не всё там удобно. Оптимально не напишешь. Придётся лупить довольно-таки длинный алгоритм. Это не проблема, но хочется прийти к более изящному решению. Вот что в таком случае будет:
    • Генерируем магик, например, добавлением идентификатор торгового инструмента и таймфрейма к некоему базовому числу(магику из инпут параметров). Идентификатор торгового инструмента нужен, что бы если тот же сов работает на разных инструментах не цеплял позиции такого же сова, работающего на другом торговом инструменте.
    • В цикле пока посылаем ордер, есть несколько попыток заданных в функции открытия позиции. При успешном открытии позиции проверяем реализованный лот. Если не весь объём реализован, тогда отнимаем от общего требуемого для реализации лота реализованный и дальше посылаем.
    • На следующем тике производится поиск открытых позиций. Критерий поиска будет всё тот же заданный в магике идентификатор торгового инструмента + Время бара, на котором сигнал. Это по вашему.
      С ордера брать цену можно, но время открытия ордера не равно времени открытия сигнального бара! Это разные вещи. Сигнальный бар может быть на конце графика даже. Это не суть. Если ещё подумать, то если будет проскальзывание N-пунктов, то придётся учитывать отклонение цены. В общем, это не есть рационалньый вариант реализации. Слишком много нужно учитывать нюансов. Куда проще и практичнее сохранить несеолько переменных куда-то и по ним перебирать..

    Цитата Сообщение от ir0407 Посмотреть сообщение
    С такими запросами тебе не то что мейджика, никакого коммента не хватит. В таком случае одна дорога - лепить собственную систему учета ордеров и всей совокупной к ним инфы.
    С какими такими? 2 или 3 цифры записать это много что-ли? Да ладно..


  26. post_thanks Получено лайков: 3

    Незарегистрированный (3 пользователя)

  27. Линк #15 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Я бы для начала "зафиксировал" сигнал по которому устанавливается ордер, чтобы повторно с ним не работать и проконтролировать до
    логического завершения обработку.
    Так зафикстированно изначально. По тому же времени и цене сигнального бара. Всё в этом плане чётко..

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    То проверил соответствие расчётных данных, данным в открытом ордере, и сразу эту информацию разместил в правильное место.
    Или обработал ошибку, правда метод m_result я бы напильником доработал. Ну не нравиться он мне.
    После правильных действий, знал бы с каким ордером надо продолжить работу, а с каким уже работа закончена. Даже если их пачка.
    Всё опять-таки сводится к тому, где хранить..

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Ты изначально определись сам, какие данные, и в каком виде, тебе нужны для реализации твоей задачи,
    где ты и как их будешь хранить, обновлять и когда удалять.
    Я изначально написать какие данные. Менять не буду т.к. уже это обдуманно.

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Не, она конечно может совпадать, но такли это будет на самом деле? А не в твоём воображении.
    100%. Это уже проверенно.

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    А после обмозговывания проверил кодом, не в тестере, как на самом деле работает?
    Да, конечно. Я когда пишу библиотеки или классы перед пушем в репозиторий всё проверяю.

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    А ты не жди, поставь в очередь, потом по сигналу, ранее зафиксированному, проверишь, есть на него ордер, или нет.
    Проверь по нужным параметрам или нет.
    Проверил. Но проблема в том, что лот там, где я проверял всегда исполняется целиом. не дробится нигде. Оно вообще нужно в МТ4(5) ? Или это так.. сделано для вида, типа мы торгуем на межбанке и всё здесь цивильно как и должно быть? Я не встречал просто дробирования лота брокером..

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    И в чём это проявляется? Ты ж сам этот процесс организовываешь.
    И помогает?
    Проявляется в том, что потом писать совы быстро. По началу дольше пишется, а потом сова состояит из нескольких десятков строк. Вся логика за её пределами.Мне так больше нравится. А не когда в одном файле километры. Как это обычно делается у многих. В том числе и метаквоты пример подают своими стандартными классами далеко не положительный. Бардак там полный. Тоже самое можно попилить в разы по строкам и по комфорту использования. Если у человека нет опыта программирования, он там мозг поломает и не поймёт вообще ничего. Другие либо пользуются тем что есть, либо.. как я пишут своё. Я выбираю своё, т.к. таки образом я контролирую весь процесс. И чаще всё понятно. Но вот бывают и сложности. Хотя стандартные классы их не решать всё-равно..

    Цитата Сообщение от MonyaMaker Посмотреть сообщение
    Причём тут таймфремы?
    Как напишешь, так и будет работать.
    Я имею ввиду, что на мелких периодах сигналы чаще. На тиках ещё чаще. Если алгоритм будем медленный, то не успеешь всё исполнить))
    Мне тики не нужны.. но это не поводу писать абы как.


  28. post_thanks Получено лайков: 1

    Незарегистрированный (1 пользователь)

  29. Линк #16 Свернуть пост
    Частый гость
    скальпер стараюсь положительно себя зарекомендовать Аватар для скальпер
    Регистрация:
    09.04.2011
    Пол:
    Мужчина
    Сообщений:
    242
    Деньги за посты (Подробнее):
    1062 RUB
    Поставил лайков:
    14
    Получено лайков:  33
    в 32 сообщениях
    14%
    Цитата Сообщение от IgorM Посмотреть сообщение
    а попробуйте представить, что нет и никогда не было такой возможности в МТ? - так легче будет
    Уже..)

    Цитата Сообщение от IgorM Посмотреть сообщение
    ну и не проблема поискать сервер на котором брокер не модифицирует поле комментария и пользоваться раз сильно хочется
    Влом. Тем более, это придётся у каждого проторговать. Это как-бы долго. Мне проще кд написать. Но вот ещё не всё продумано..

    Цитата Сообщение от IgorM Посмотреть сообщение
    используйте библиотеку классов из поставки МТ4: "Класс CArrayString является классом динамического массива переменных типа string"
    Причём тут библиотека? Здаача сохранять данные. А как ими оперировать это уже другой вопрос..

    Цитата Сообщение от IgorM Посмотреть сообщение
    не вижу проблемы для написания собственной функции работы с комментариями ордера, может напишу в качестве баловста, но проверять работоспособность лень
    А смысл? Если ДЦ их пилит. Нет резона это писать. Я бы написал за часок, если бы была уверенность в актуальности этого подхода. Но мы имеем дело с МТ. А это не то, что даёт комфорт..


  30. post_thanks Получено лайков: 2

    Незарегистрированный (2 пользователя)

  31. Линк #17 Свернуть пост
    Свой человек
    Все пучком
     
    IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация IgorM хорошая репутация Аватар для IgorM
    Регистрация:
    09.05.2011
    Пол:
    Мужчина
    Сообщений:
    798
    Деньги за посты (Подробнее):
    27419 RUB
    Поставил лайков:
    233
    Получено лайков:  704
    в 407 сообщениях
    88%
    Цитата Сообщение от скальпер Посмотреть сообщение
    Причём тут библиотека? Здаача сохранять данные. А как ими оперировать это уже другой вопрос..
    потому что
    Цитата Сообщение от скальпер Посмотреть сообщение
    Влом
    как бы Вам объяснить задачу современного программиста... ну в общем уметь пользоваться готовыми решениями или их подстраивать под себя
    вот я потратил 15 минут на изучение справки MQL и 5 минут на написание кода по Вашей задаче и 5 минут на тестирование и исправление багов - итого 25 минут, мне тоже лень, но я нашел 25 минут
    PHP код:
    #property copyright "IgorM"
    #property link "https://forexdengi.com/members/15354-igorm"
    #property version "1.00"
    #property strict
    #include

    class COrderComment {
    private:
    CArrayString str,number;
    public:
    //-----------------------------------------------------------------
    void Set(int ticket,string comment){
    str.Add(comment);
    number.Add(IntegerToString(ticket));
    }
    //-----------------------------------------------------------------
    string Get(int ticket){
    string res="",stmp = IntegerToString(ticket);
    for(
    int i=0;i<number.Total();i++){
    if(
    number.At(i)==stmp) {res=str.At(i); break;}
    }
    return(
    res);
    }
    //-----------------------------------------------------------------
    void clear(){
    str.Shutdown();
    number.Shutdown();
    }
    };
    COrderComment mycomment;
    //+------------------------------------------------------------------+
    //| Script program start function |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    string s;
    int i;
    // запишем 5 коментариев
    for(i=1;i<6;i++) mycomment.Set(i,StringConcatenate("comment# ",i));
    // прочитаем 7 коментариев
    for(i=1;i<8;i++) Print(i," : ",mycomment.Get(i));
    // удалим все коментарии
    mycomment.clear();
    // прочитаем 7 коментариев
    Print("Удалил....");
    for(
    i=1;i<6;i++) Print(i," : ",mycomment.Get(i));
    // запишем 5 коментариев
    for(i=1;i<6;i++) mycomment.Set(i,StringConcatenate("comment# ",i));
    // прочитаем 5 коментариев
    for(i=1;i<6;i++) Print(i," : ",mycomment.Get(i));
    }
    //+------------------------------------------------------------------+
    сам класс получился на 12 строк (скрипт для проверки на 50 строк - всего то!!! ) ибо я умею пользоваться готовыми решениями, а не изобретаю "самокат", хотя если бы изобретал, то код был бы длинее, но ушел бы от связки int-->string-->int, хотите самостоятельно напишите с нуля все это
    как пользоваться?, ну в принципе элементарно Ватсон (с)
    PHP код:
    string comm = "Очень важная информация!!!! Это коментарий к ордеру и к сигналу!!! :)";
    int TICKET=OrderSend(Symbol(),OP_BUY, Lot, Price,Slippage,SL,TP,comm,magic_,0,col);
    if(
    TICKET==-1)Print("Ошибка № ",GetLastError()," при открытиии ордера"); else mycomment.Set(TICKET,comm);

    PS:результат работы скрипта:


    Последний раз редактировалось IgorM; 16.06.2018 в 16:02.

  32. post_thanks Получено лайков: 4

    скальпер (16.06.2018), Незарегистрированный (3 пользователя)