Что-то типа макроса сделать в MQL4

 

Как изящней, к примеру, сделать вычисление некоторой логической формулы в MQL4? Фактически преобразовать string в bool

string per="0>1 && 1<2 && 2>0 && 3<2 && 3>=1 && 4>3 && 5<3";

if(значение логического уравнения в переменной per==true) ....

 
Viktor Gorbunov:

Как изящней, к примеру, сделать вычисление некоторой логической формулы в MQL4?

string per="0>1 && 1<2 && 2>0 && 3<2 && 3>=1 && 4>3 && 5<3";

if(значение логического уравнения в переменной per==true) ....

если строку задаёт пользователь, то только писать свой парсер и FA.

а если не пользователь, то зачем это делать строкой ?

PS. не обойдусь конечно без само-рекламы :-)

if ( 0!= tcl.LongCall(tcl.Obj("expr"),tcl.Obj(per)) ) {

  // условие в строке per = true

}

 
Viktor Gorbunov:

Как изящней, к примеру, сделать вычисление некоторой логической формулы в MQL4? Фактически преобразовать string в bool

string per="0>1 && 1<2 && 2>0 && 3<2 && 3>=1 && 4>3 && 5<3";

if(значение логического уравнения в переменной per==true) ....

А зачем string? Почему не сразу bool per=(0>1 && 1<2 && 2>0 && 3<2 && 3>=1 && 4>3 && 5<3);
 
Maxim Kuznetsov:

если строку задаёт пользователь, то только писать свой парсер и FA.

а если не пользователь, то зачем это делать строкой ?

PS. не обойдусь конечно без само-рекламы :-)

if ( 0!= tcl.LongCall(tcl.Obj("expr"),tcl.Obj(per)) ) {

  // условие в строке per = true

}

Да строку задает пользователь..., но потом из нее формируется логика принятия решения

Похоже придется писать самому анализ истинности

 
Alexey Viktorov:
А зачем string? Почему не сразу bool per=(0>1 && 1<2 && 2>0 && 3<2 && 3>=1 && 4>3 && 5<3);
это как пример - для пользователя схема условий более проста
 
Viktor Gorbunov:

Да строку задает пользователь..., но потом из нее формируется логика принятия решения

Похоже придется писать самому анализ истинности

это не настолько сложно как кажется.. :-) на уровне лабараторки где-то..а если RPN или а-ля Форт то даже и писать-то почти нечего

берёте на просторах интернета какой-нить "multifunctional calculator" на С/C++ и спокойно разбираете часть которая относится к разбору и вычислениям.


 
Maxim Kuznetsov:

это не настолько сложно как кажется.. :-) на уровне лабараторки где-то..а если RPN или а-ля Форт то даже и писать-то почти нечего

берёте на просторах интернета какой-нить "multifunctional calculator" на С/C++ и спокойно разбираете часть которая относится к разбору и вычислениям.



Ну такие штуки я еще на PL/I в 80-х делал :) - думал, мысль у кого-нибудь новая есть, а то старый стал, а новым трюкам старую собаку.. ну сами знаете

 

Можно подключить готовую библиотеку.

http://beltoforion.de/article.php?a=muparser

Introduction to the muparser fast math parser library
  • beltoforion.de
Many applications require the parsing of mathematical expressions. The main objective of this library is to provide a fast and easy way of doing this. muParser is an extensible high performance math expression parser library written in C++. It works by transforming a mathematical expression into bytecode and precalculating constant parts of the...
 
Viktor Gorbunov:

Ну такие штуки я еще на PL/I в 80-х делал :) - думал, мысль у кого-нибудь новая есть, а то старый стал, а новым трюкам старую собаку.. ну сами знаете

ну какие тут новые мысли :-) классика : парсить, пихать в стек по приоритету, вытаскивать и вычислять..

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