Торговые функции для чайников. - страница 3

 
User_mt5:

Спасибо. Но к сожалению, это не то.

Разбираться с чудотворным некомментированным инклудом в 1600 строк, из которых 99% в данном примере лишние - это уже совсем другая идея. А без понимания - кому это всё нужно?

Но за попытку спасибо.


Если Вы хотите начать - Вам совсем не нужно лезть во внутренности стандартной библиотеки (а торговый класс CTrade - это и есть стандартная библиотека). Вам нужно просто научиться пользоваться. Обратите внимание - весь скрипт - всего пара десятков строк, из которых сама ТОРГОВАЯ ОПЕРАЦИЯ - это одна строка:

   m_trade.Buy(InpVolume);
 
Vladimir Karputov:

Если Вы хотите начать - Вам совсем не нужно лезть во внутренности стандартной библиотеки (а торговый класс CTrade - это и есть стандартная библиотека). Вам нужно просто научиться пользоваться. Обратите внимание - весь скрипт - всего пара десятков строк, из которых сама ТОРГОВАЯ ОПЕРАЦИЯ - это одна строка:

На уровне пользователя я умею.

Мне нужно немного другое - минимум чистого кода для обеспечения торговли. И разобрать по косточкам.

Но похоже без классов здесь не обойтись. Но надеюсь по крайней мере обойтись без стандартных.

В общем, спасибо, дальше попробую сам. Примеры-то в документации есть.

 
User_mt5:

На уровне пользователя я умею.

Мне нужно немного другое - минимум чистого кода для обеспечения торговли. И разобрать по косточкам.

Но похоже без классов здесь не обойтись. Но надеюсь по крайней мере обойтись без стандартных.

В общем, спасибо, дальше попробую сам. Примеры-то в документации есть.

Основное что надо чётко понимать для написания кода открытия позиции написано здесь.

Без классов обойтись можно, но с ними удобней. Лично я использую исключительно примитив из классов. На большее не хватает высохшей части этого... как его... в общем знаешь чего.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

Основное что надо чётко понимать для написания кода открытия позиции написано здесь.

Без классов обойтись можно, но с ними удобней. Лично я использую исключительно примитив из классов. На большее не хватает высохшей части этого... как его... в общем знаешь чего.

Это, что называется, не в бровь, а в глаз. Я как раз этим и занят.

Меня, собственно, что смущает.. Я не всегда нахожу логику в идеологии разработчиков. Например, мне пока не понятно чем они руководствовались, когда создавали две торговые функции - OnTrade() и OnTradeTransaction().

Простой пример. Функция:

bool  OrderCalcMargin( 
   ENUM_ORDER_TYPE       action,           // тип ордера 
   string                symbol,           // имя символа 
   double                volume,           // объем 
   double                price,            // цена открытия 
   double&               margin            // переменная для получения значения маржи 
   );

Вот из каких соображений она булёвая, а результат заталкивается в дабловый этот margin? Почему не сделать по-человечески, например, так:

double  OrderCalcMargin( 
   ENUM_ORDER_TYPE       action,           // тип ордера 
   string                symbol,           // имя символа 
   double                volume,           // объем 
   double                price             // цена открытия 
   );

И чтобы сама ф-ия возвращала значение margin. Большинство ф-ий так и сделаны. А эта - нет. Кому это нужно, чтобы эта ф-ия возвращала false, если всё равно потом в той же документации рекомендуется использовать GetLastError() ?

Не знаю.. Мне очень трудно это понять. Я изучаю этот язык как историю, или китайский. Т.е. всякий раз не знаешь - важно то или иное свойство языка или это просто прихоть программиста. Это касается и всей философии торговых функций. Поэтому да, я тоже выделю из всего этого наследия сухой остаток, создам алгоритмические примитивы и буду пользовать, остальное - в мусорку.

Насчёт высохшей части - это жизнь как у арбуза: живот растёт, а хвостик засыхает:) И да, от этого внешнего мира тошнит уже..

За ссылочку спасибо.

 
User_mt5:

Это, что называется, не в бровь, а в глаз. Я как раз этим и занят.

Меня, собственно, что смущает.. Я не всегда нахожу логику в идеологии разработчиков. Например, мне пока не понятно чем они руководствовались, когда создавали две торговые функции - OnTrade() и OnTradeTransaction().

Простой пример. Функция:

Вот из каких соображений она булёвая, а результат заталкивается в дабловый этот margin? Почему не сделать по-человечески, например, так:

И чтобы сама ф-ия возвращала значение margin. Большинство ф-ий так и сделаны. А эта - нет. Кому это нужно, чтобы эта ф-ия возвращала false, если всё равно потом в той же документации рекомендуется использовать GetLastError() ?

Не знаю.. Мне очень трудно это понять, я изучаю этот язык, как историю, или китайский язык. Т.е. всякий раз не знаешь - важно то или иное свойство языка или это просто прихоть программиста. Это касается и всей философии торговых функций. Поэтому да, я тоже выделю из всего этого наследия сухой остаток, создам алгоритмические примитивы и буду пользовать, остальное - в мусорку.

Насчёт высохшей части - это жизнь как у арбуза: живот растёт, а хвостик засыхает:) Но у меня получается шире - от этого внешнего мира тошнит уже..

За ссылочку спасибо.

Наверное я далеко не продвинутый программист, потому и не использую OnTrade(), хотя и понимаю что её можно использовать. Ну, как минимум, для проверки какие позиции и ордера остались или появились новые. Отличия от OnTradeTransaction() конечно-же есть и эти отличия можно использовать. Всё это приходит с опытом, а опыт как половое бессилие приходит с годами. Лучше иметь и не использовать пока, чем при отсутствии писать костыли. Придёт просветление в мозгу и можно будет проверить на сколько проще будет написать с использованием этих функций, чем без них.

Что касается тех функций которые возвращают булево значение и результат пишут в переменную по ссылке. Ну в некоторых случаях это даже приятней, проще написать. Плюс ко всему можно написать перегрузку этой функции.

Вот пример

double OrderCalcMargin(ENUM_ORDER_TYPE type, string symb, double vol, double pr)
{
 double marg;
 return(OrderCalcMargin(type, symb, vol, pr, marg) ? marg : 0.0);
}

и результат


Позволю себе высказать рекомендацию: Не ищи к чему придраться, что не соответствует собственной логике. Ищи как использовать то что есть. Это полезней.

 
Alexey Viktorov:

Наверное я далеко не продвинутый программист, потому и не использую OnTrade(), хотя и понимаю что её можно использовать. Ну, как минимум, для проверки какие позиции и ордера остались или появились новые. Отличия от OnTradeTransaction() конечно-же есть и эти отличия можно использовать. Всё это приходит с опытом, а опыт как половое бессилие приходит с годами. Лучше иметь и не использовать пока, чем при отсутствии писать костыли. Придёт просветление в мозгу и можно будет проверить на сколько проще будет написать с использованием этих функций, чем без них.

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

Но всё равно сделаю всё по-своему:) На чужие коды у меня аллергия.

За совет спасибо.

 
User_mt5:

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

Но всё равно сделаю всё по-своему:) На чужие коды у меня аллергия.

За совет спасибо.

Может я просто не смог подобрать другого слова, кроме "придираться", да и сейчас не нахожу. Но это не означает чего-то нехорошего, не обращай внимания.

Да совет ничего не стоит. Я большую часть жизни прожил в стране советов. Да и приятно общаться с человеком который действительно чему-то учится, а не набирает библиотеку кубиков лего.

 
Alexey Viktorov:

Может я просто не смог подобрать другого слова, кроме "придираться", да и сейчас не нахожу. Но это не означает чего-то нехорошего, не обращай внимания.

Да совет ничего не стоит. Я большую часть жизни прожил в стране советов. Да и приятно общаться с человеком который действительно чему-то учится, а не набирает библиотеку кубиков лего.

Я не придираюсь. Ни к коду, ни к Вам. Живу себе как мне комфортно ("сижу, починяю примус, никого не трогаю"). Но я не хочу чинить чужие примусы, мне больше нравится свой мастерить. Советы часто оказываются бесполезны не потому, что не правильны или неправильно понимаемы, а просто потому, что халявная энергия не усваивается. Если не создавать свой примус, то на кой ляд вообще всё это нужно?

:)

 
User_mt5:

Я не придираюсь. Ни к коду, ни к Вам. Живу себе как мне комфортно ("сижу, починяю примус, никого не трогаю"). Но я не хочу чинить чужие примусы, мне больше нравится свой мастерить. Советы часто оказываются бесполезны не потому, что не правильны или неправильно понимаемы, а просто потому, что халявная энергия не усваивается. Если не создавать свой примус, то на кой ляд вообще всё это нужно?

:)

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

 
Alexey Viktorov:

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

Отлично. Мы с Вами друг друга поняли правильно. И да, хватит разглагольствовать (это я о себе). Пора заняться делом.

Вопросы, судя по всему, ещё будут. Спасибо.