советник - разные вопросы - страница 17

 

#Расчеты заказов и обновление информации о счетах- Открыто

( Однажды я уже спрашивал - но мне все еще нужна помощь )

Я вызываю свои функции расчета по OnTick() или Start(), и они зависят от тиков символа графика.
И я начал искать, как мне сделать так, чтобы обновления расчетов моего советника не зависели от тиков и символов ( / Chart - Ticks, Symbols ).
Просто я пытаюсь сделать так, чтобы 'All Orders Calculations & Account Info's' обновлялисьсинхронно (/ в реальном времени) с 'Terminal > Trade'.

Пожалуйста, помогите мне, спасибо.
Заранее спасибо.

 
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
Documentation on MQL5: Language Basics / Functions / Event Handling Functions
  • www.mql5.com
Language Basics / Functions / Event Handling Functions - Reference on algorithmic/automated trading language for MetaTrader 5
 
Marco vd Heijden:

И SymbolName(x,1);

Хороший комментарий, который мне помог, большое спасибо.
Сейчас я использую OnTick() и OnTimer(), обе эти функции работают хорошо для меня. (Я впервые использую OnTimer() для советника).

---

Также я хотел бы попробовать Тики. Мне нужны только тики от каких символов (пар) на "Terminal > Trade" и текущего символа графика. Может ли этот SymbolName() помочь мне?
Пожалуйста, помогите мне или дайте мне совет, как я могу это сделать?

Всего наилучшего.

 
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }
 
Marco vd Heijden:
   for(int i=0;i<SymbolsTotal(1);i++)
     {
      Print(i," Symbol: ",SymbolName(i,1)," Ask: ",MarketInfo(SymbolName(i,1),MODE_ASK)," Bid: ",MarketInfo(SymbolName(i,1),MODE_BID));
     }

Удивительный пример и действительно полезный комментарий для меня, спасибо большое.

Возможно ли, что тики приходят от торговых пар/символов, пожалуйста?
Потому что почти все время мой Market Watch показывает все символы - специально я ищу новые хорошие пары для торговли, и только поэтому я исследую некоторые способы, как я могу получить ' Terminal > Trade ' символы / пары, только в настоящее время открывая тики сделок.

Заранее большое спасибо.

 
нет, но вы можете обновить цену в функции OnTimer(), установленной на низкое значение, например, 250 миллисекунд будут равны 4 тикам в секунду, так зачем вам это нужно?
 
Marco vd Heijden:
Нет, но вы можете обновить цену в функции OnTimer(), установленной на низкое значение, например 250 миллисекунд будет равно 4 тикам в секунду, так зачем вам это нужно?

Спасибо за ваш комментарий.

( подтема -#Расчеты ордеров и обновление информации о счете - Открыть) Как я уже говорил, я использую расчеты прибыли ордеров, и это не синхронизируется с ' Terminal > Trade ', это единственная причина.
Так, иногда волатильность очень низкая, тиков приходит наименьшее количество, и я думаю, что функции могут работать 4 раза в секунду, так что работает впустую ( / напрасно ).

Если я не могу найти способ, который может дать мне ' Терминал > Торговля ' тики для ордеров Расчеты прибыли и информация о счете ( / обновления ) синхронизации. Я буду использовать ваши очень полезные методы - который вы показали мне, что способы в ваших последних комментариях, большое спасибо. (Я уже протестировал и этот способ работает).

Заранее спасибо.

 

Если вам это действительно интересно, вы можете использовать:

struct MqlTick
  {
   datetime     time;          // Time of the last prices update
   double       bid;           // Current Bid price
   double       ask;           // Current Ask price
   double       last;          // Price of the last deal (Last)
   ulong        volume;        // Volume for the current Last price
   long         time_msc;      // Time of a price last update in milliseconds
   uint         flags          // Tick flags
  };

Структура для возврата текущих цен (MqlTick)

Это структура для хранения последних цен символа. Она предназначена для быстрого получения наиболее востребованной информации о текущих ценах.

Переменная типа MqlTick позволяет получить значения Ask, Bid, Last и Volume за один вызов функции SymbolInfoTick().

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

Вы можете проанализировать тиковые флаги, чтобы выяснить, какие именно данные были изменены:

  • TICK_FLAG_BID - тик изменил цену Bid
  • TICK_FLAG_ASK - тик изменил цену Ask
  • TICK_FLAG_LAST - тик изменил цену последней сделки
  • TICK_FLAG_VOLUME - тик изменил объем
  • TICK_FLAG_BUY - тик является результатом сделки на покупку
  • TICK_FLAG_SELL - тик является результатом сделки на продажу

Пример:

void OnTick()
  {
   MqlTick last_tick;
//---
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print(last_tick.time,": Bid = ",last_tick.bid,
            " Ask = ",last_tick.ask,"  Volume = ",last_tick.volume);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
//---
  }

См. также

https://www.mql5.com/en/docs/constants/structures/mqltick

Структуры и классы, CopyTicks(), SymbolInfoTick()

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

Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Price Data Structure - Reference on algorithmic/automated trading language for MetaTrader 5
 

Marco vd Heijden:

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

Спасибо за ваш информативный комментарий, очень признателен.

---

Если я прав, то эта часть предложения является вопросом.

... зачем вам это нужно.
Есть
только одна причина, я пытаюсь предотвратить нерелевантные циклы/прогоны функций.

(Я хотел бы упомянуть сегодня, когда я тестировал расчет прибыли по ордерам моего советника, расчет постоянно обновлялся (/ циклы просто так) Я тестировал его на графике EURUSD, и пока я тестировал, я видел очень низкий объем почти 20 (не более) в минуту.
И пока я тестировал, еще один раз я точно знал, я могу найти способ, который даст мне только ' Terminal > Trade ' Ticks. Я хотел бы сказать еще раз, нет никакой причины.
Просто я знаю, что способы, которые могут дать мне тики OnTick() только тики могут исходить от символа графика. А другие OnTimer() могут дать мне 4 тика в секунду... и так далее, которые я узнал из ваших очень полезных и замечательных комментариев, еще раз большое спасибо за это. )

И мне нужно описать свою ситуацию.

Расчет прибыли моих ордеров может быть синхронизирован с панелью Terminal Trade, пока мой советник работает на символе графика (например, EURUSD), если символ графика равен символу ордера, но если я открою новую позицию по GBPUSD, то синхронизация прервется с панелью Terminal Trade.
И если у меня есть ордера по EURUSD, но я пытаюсь искать новые хорошие пары для торговли на другом символе графика (например: GBPUSD, NZDUSD и т.д.) Расчет прибыли ордеров не синхронизируется с панелью "Терминал > Торговля".
( Не забывайте, что я уже знаю OnTimer(), который вы помогли мне, как я могу использовать его для 4 тиков в секунду. )

Вся эта забота исходит отсюда.

Сегодня я открываю позиции на короткие сроки, если я буду открывать позиции на длинные сроки, я не буду уделять внимание этой синхронизации с Terminal Trade.

---

Надеюсь, теперь вы поняли меня более ясно.

Всего наилучшего.

 

Если вы действительно хотите ждать каждого тика, вам придется написать отдельный советник для каждого символа и использовать функцию OnTick().

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

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

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