Парсер формул для МТ5 или хотя бы МТ4

 

Напомните, плиз, индикатор для МТ4, который формулы с символами парсит, типа

5 * (GBPUSD + EURUSD) / AUDUSD + 2 * NZDUSD
И может кто знает, есть ли такой в кодобазе для МТ5?
 
Andy Sanders:

Напомните, плиз, индикатор для МТ4, который формулы с символами парсит, типа

5 * (GBPUSD + EURUSD) / AUDUSD + 2 * NZDUSD
И может кто знает, есть ли такой в кодобазе для МТ5?

https://www.mql5.com/ru/code/10617

для мт5 я бы и сам покрутил. у автора она в маркете.

ChartBuilder
ChartBuilder
  • голосов: 17
  • 2012.02.20
  • Alexey Navoykov
  • www.mql5.com
Позволяет легко строить любые синтетические графики с участием любого количества торговых интрументов. Достаточно лишь задать формулу.
 
Раз есть исходник для МТ4 можно конвертнуть для МТ5.
 
У автора в исходниках, если без мата, то "слишком буйный полет мысли" ... тот код мертв, он непереводим, поэтому написал свой парсер.
В аттаче индикатор, он чисто для примера, может тормозить и показывать на первый взгляд непонятные вещи, почему-то сдвиг не в ту сторону идет, но зато хороший пример применения класса для парсинга формул :)

Основной алгоритм
http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm
http://scriptasylum.com/tutorials/infix_postfix/algorithms/postfix-evaluation/index.htm
https://en.wikipedia.org/wiki/Shunting-yard_algorithm

Пример имплементации, но она здесь с ошибками :)
http://rosettacode.org/wiki/Parsing/Shunting-yard_algorithm#JavaScript

Проверка формул на ошибки в имплементации
http://www.meta-calculator.com/learning-lab/how-to-build-scientific-calculator/infix-to-postifix-convertor.php


Infix to Postfix Conversion
  • scriptasylum.com
Infix Expression : Any expression in the standard form like "2*3-4/5" is an Infix(Inorder) expression. Postfix Expression : The Postfix(Postorder) form of the above expression is "23*45/-". Infix to Postfix Conversion : In normal algebra we use the infix notation like a+b*c. The corresponding postfix notation is abc*+. The algorithm for the...
Файлы:
Doc.zip  34 kb
 
Andy Sanders:


спасибо. а можно довести его до ума и в кодобазу?
 
ivanivan_11:

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


Индикатор для построения произвольных графиков, в основе которых лежит заданная юзером формула.
Графики отрисовываются в барах для таймфрейма выбранного в параметрах индикатора.
Графики выбранных инструментов синхронизированны по времени.
Пробелы в формуле необязательны, дробные числа задаются только через точку.
Чтобы не мерять слонов в попугаях, а переводить все в валюту депозита, можно установить параметр InpAlign = true

Поддерживаемые операции, по приоритету выполнения :

Скобки : (a ... b)
Возведение в степень : a ^ b
Деление : a / b
Умножение : a * b
Сложение : a + b
Вычитание : a - b

Пример применения, допустим хотим узнать раздвижку между корзинами валют за последние 1000 баров на графике М1 :

InpDepth = 1000
InpPeriod - PERIOD_M1
InpExpression = "3 * EURUSD * 1.5 * AUDUSD * GBPUSD - (5 * AUDGBP - 2 * EURGBP) * 1.2 * CHFGBP"

На выходе получим график движения синтетика, при условии покупки 3 лотов EURUSD, 1.5 лота AUDUSD и так далее.
Идея индикатора заимствована отсюда и MS Excel https://www.mql5.com/ru/code/1061

Файлы:
Doc.zip  8 kb
 
Andy Sanders:

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


спасибо. дело в том,что многие интересные вещи,которые люди делают,так и теряются среди тонн мусора тут на форуме и потом найти их очень сложно,а то и вовсе невозможно,т.к. к ним и описания накакого нет))
 
Andy Sanders:

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


Спасибо!) 

Причина обращения: