English 中文 Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Автоматное программирование как новый способ создания автоматических торговых систем

Автоматное программирование как новый способ создания автоматических торговых систем

MetaTrader 5Трейдинг | 14 августа 2012, 19:33
17 177 54
MT5
[Удален]

ἓν οἶδα ὅτι οὐδὲν οἶδα ( ο φιλόσοφος Σωκράτης )

я знаю, что ничего не знаю ( философ Сократ)

Введение

Начну с того, что эта тема совершенно не известна никому из трейдеров, разрабатывающих советники на MetaQuotes Language 4/5 (MQL4/5). Я убедился, попробовав найти эту тематику поиском на сайте MetaQuotes. Ничего нет.

Каждый трейдер создает свой советник, но для этого надо очень серьезно решить все проблемы с программированием и сложнейшей логикой работы программы. Ведь программа обязана САМА работать во всех стандартных и форс-мажорных ситуациях как часы.

Но как учесть все? Это очень и очень сложно, поэтому для автоматической системы управления требуется правильное программирование всех систем управления, а для этого подойдет только единственный правильный способ программирования "Автоматное программирование". В последние годы большое внимание уделяется разработке технологий программирования для встроенных систем и систем реального времени, к которым предъявляются высокие требования по качеству программного обеспечения.

В России автором Шалыто А.А. (преподаватель, профессор, доктор технических наук, заведующий кафедрой "Технологии программирования" СПбГУ ИТМО, ) в 1991 году разработан способ программирования, названный им "автоматное программирование". Я думаю, что читателям будет интересно потом увидеть простоту и легкость Автоматного программирования или SWITCH-технологии. Это настолько удобное программирование МТС систем в MetaQuotes Language, что лучше не придумаешь. Этот стиль очень точно вписывается в систему принятий сложнейших решений.

1. Начну издалека, с проблемы

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

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

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

Если программа большая, то проверить по тексту соответствие алгоритму невозможно. Для проверки правильности реализации используется некая процедура под названием "Тестирование". При этом по существу проверяется как программист понял алгоритм (тот, который на бумаге) и как преобразовал его в алгоритм в своей голове, а далее в текст программы. В итоге программист является единственным держателем важнейшей логической информации, и становится абсолютно не важным то, что было придумано до программной реализации.

И дело даже не в том, что программист может заболеть (или... уйти на другую работу), а в том, что разные программисты по-своему "строят" текст программы, в зависимости от интеллекта и знания языка программирования. В любом случае, используется множество промежуточных переменных, которые программист вводит и применяет по своему усмотрению. И если программа большая и логически сложная, то для того, чтобы понять почему она "глючит" (имеются в виду не глюки операционной системы и не неправильное использование функций языка, а логически неправильное выполнение), необходим более квалифицированный специалист, которому придется разбираться уже в тексте программы.

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

Все привыкли к этому - программисты, потому, что так легче, а постановщики задач - так как не всегда владеют знаниями по программированию в нужном объеме, а если и владеют, то уж никак не могут повлиять своевременно на то, что "вытворят" программисты. Удобные среды программирования также способствуют уверенности именно в такой последовательности разработки. Развитые средства отладки и наблюдения за значениями переменных позволяют надеяться, что можно выявить любую ошибку в логике.

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

2. Логическая часть программы

Автором "автоматного программирования" предложена следующая концепция идеальной логической части программы. Вся логика программы строится на основе селектора (switch). Упрощенно, любой алгоритм управления (автомат) может быть реализован так, как показано (пока не задумывайтесь над смыслом комментариев, оцените структуру).

switch(int STATUS ) // Многозначная глобальная  переменная состояния автомата.
{
  case 0:  // старт

  // Проверка условий на дугах и петлях (условия проверяются по приоритетам),
  // выполнение перехода (изменение значения переменной STATUS)
  // и действий на дуге или петле (выполнение выходной функции);
  // протоколирование переходов и действий при выполнении условия. 

  // Вызов вложенных автоматов.
  // Выполнение выходных функций в состоянии.
  break ;
  
  case 1:
  // Проверка условий на дугах и петлях (условия проверяются по приоритетам),
  // выполнение перехода (изменение значения переменной STATUS)
  // и действий на дуге или петле (выполнение выходной функции);
  // протоколирование переходов и действий при выполнении условия. 

  // Вызов вложенных автоматов.
  // Выполнение выходных функций в состоянии.
  break ;
  
*********
*********
*********

 case N-1:
  // Проверка условий на дугах и петлях (условия проверяются по приоритетам),
  // выполнение перехода (изменение значения переменной STATUS)
  // и действий на дуге или петле (выполнение выходной функции);
  // протоколирование переходов и действий при выполнении условия. 

  // Вызов вложенных автоматов.
  // Выполнение выходных функций в состоянии.
  break ;

 case N:
  // Проверка условий на дугах и петлях (условия проверяются по приоритетам),
  // выполнение перехода (изменение значения переменной STATUS)
  // и действий на дуге или петле (выполнение выходной функции);
  // протоколирование переходов и действий при выполнении условия.

  // Вызов вложенных автоматов.
  // Выполнение выходных функций в состоянии.
  break ;
}

3. Что же такое автоматное программирование (объяснение дано автором Шалыто А.А.)

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

Можно рассматривать состояние программы и более упрощенно, в виде совокупности значений всех управляющих переменных - переменных, участвующих в условиях переходов. Тогда изменение значения одной из управляющих переменных будет означать изменение состояния программы, а число состояний программы будет определяться максимально возможным количеством комбинаций значений управляющих переменных, возникающим при ее работе. Предположим, что в программе используются только двоичные управляющие переменные (флаги). В этом случае количество состояний программы, содержащей n двоичных управляющих переменных, будет лежать в интервале от n до 2n.

Возможно, что программист предусмотрел реакции на все комбинации значений управляющих переменных (2n комбинаций в рассматриваемом случае). Однако более вероятно, что некоторые комбинации значений управляющих переменных (вплоть до 2n-n) оказались непредусмотренными. Тогда при возникновении неожиданного сочетания входных воздействий программа может перейти в непредусмотренное состояние.

Для трейдера равнозначно бездействие советника при:

  • ГЭПе,
  • сливе депозита,
  • попадании в отрицательный остаток с последующим Margin Call,
  • не фиксации хорошей прибыли с переходом затем прибыли в ноль и далее в минус,
  • неправильном открытии и закрытии лонгов и шортов,
  • прочих очевидных плохих ситуациях.

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

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

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

Для достижения строгости при разработке поведения программы необходимы три составляющие:

  • Математическая модель, позволяющая однозначно определить состояния программы и возможные переходы между ними;
  • Графическая нотация для этой модели;
  • Универсальный способ программной реализации алгоритмов, заданных в этой нотации.

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

Если в программировании в последнее время все шире используется понятие событие, то предлагаемый подход базируется на понятии состояние. С добавлением к нему понятия входное воздействие, которое может быть входной переменной или событием, вводится термин автомат без выхода. К последнему добавляется понятие выходное воздействие и вводится термин автомат (конечный, детерминированный). Поэтому область программирования, базирующаяся на этом понятии, названа автоматным программированием, а процесс создания таких программ - автоматным проектированием программ.

Особенность рассматриваемого подхода состоит в том, что при его использовании автоматы задаются графами переходов. Для различения их вершин вводится понятие кодирование состояний. При выборе "многозначного кодирования состояний" с помощью одной переменной можно различить состояния, число которых совпадает со значностью выбранной переменной. Это позволило ввести в программирование такой термин, как наблюдаемость программ.

В рамках предлагаемого подхода программирование выполняется "через состояния", а не "через переменные" (флаги), что помогает лучше понять и специфицировать задачу и ее составные части. При этом отладка проводится путем протоколирования в терминах автоматов.

Поскольку от графа переходов к тексту программы предлагается переходить формально и изоморфно, то при применении языков программирования высокого уровня наиболее рационально делать это с помощью конструкции switch. Поэтому технологию автоматного программирования было решено назвать "SWITCH-технология".

4. Программирование с явным выделением состояний

В дальнейшем автоматный подход был распространен на событийные системы, которые называются также "реактивными". Реактивные системы взаимодействуют с окружающей средой путем обмена сообщениями в темпе, задаваемом средой (к этому классу можно отнести советник).

Для программирования событийных систем с применением автоматов был использован процедурный подход, и поэтому такое программирование было названо программированием с явным выделением состояний. При этом выходные воздействия привязаны к дугам, петлям или вершинам графов переходов (применяются смешанные автоматы - автоматы Мура/Мили). Это позволяет в компактном виде представлять последовательности действий, которые являются реакциями на соответствующие входные воздействия.

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

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

Другая важнейшая особенность описываемого подхода состоит в том, что при его применении автоматы используются триедино:

  • При спецификации;
  • При программировании (сохраняются в программном коде);
  • При протоколировании, выполняемом в терминах автоматов (как указано выше).

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

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

5. Основные понятия автоматного программирования

Базовым понятием автоматного программирования является СОСТОЯНИЕ. Основное свойство состояния системы в момент времени t0 заключается в "отделении" будущего (t > t0) от прошлого (t < t0) в том смысле, что текущее состояние несет в себе всю информацию о прошлом системы, необходимую для определения ее реакции на любое входное воздействие, формируемое в момент времени t0.

При использовании понятия СОСТОЯНИЕ знание предыстории не требуется. Состояние можно рассматривать как особую характеристику, которая в неявной форме объединяет все входные воздействия прошлого, влияющие на реакцию сущности в настоящий момент времени. Реакция зависит теперь только от входного воздействия и текущего состояния.

Понятие входное воздействие также является одним из базовых для автоматного программирования. Чаще всего, входное воздействие – это вектор. Его компоненты подразделяются на события и входные переменные в зависимости от смысла и механизма формирования.

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

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

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

На практике чаще применяется проектирование от объектов управления и событий:

  1. Исходными данными задачи считается не только словесное описание целевого поведения системы, но и (более или менее) точная спецификация набора событий, поступающих в систему из внешней среды, и множеств запросов и команд всех объектов управления.

  2. Строится набор управляющих состояний.

  3. Каждому запросу объектов управления ставится в соответствие входная переменная автомата, каждой команде – выходная. На основе управляющих состояний, событий, входных и выходных переменных строится автомат, обеспечивающий заданное поведение системы.

6. Особенности и достоинства программы

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

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

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

В последнее утверждение трудно поверить, ведь все мы привыкли без всяких особых размышлений применять множество глобальных и локальных переменных (флагов). А куда же без них?! Чаще всего это флаги, сигнализирующие программе о выполнении какого-либо условия. Флаг устанавливается (принимает значение TRUE) в нужный, по мнению программиста, момент, а потом (чаще всего, только после того как этот флаг вызывает нежелательные последствия своим вечным TRUE) начинается мучительный поиск места в программе для его сброса в значение FALSE.

Знакомо, не правда ли? Так вот теперь сообразите, глядя на текст примера: ведь здесь не применяется никаких дополнительных переменных, а просто изменяется значение номера состояния, и изменяется оно при выполнении логического условия. Чем не достойная замена флагов?!

Главная роль при создании логической части программы отводится алгоритму. Слова логическая часть являются ключевыми, это надо сразу запомнить. Основой всего, в данном случае, служит нечто - состояние. Необходимо добавить еще только одно слово - ожидание. Получаем, на мой взгляд, вполне достаточное определение состояние ожидания. Ожидают в состоянии появления входных воздействий (признаков, значений или событий). Ожидание может быть либо кратким, либо продолжительным. Или, по-другому - состояния бывают неустойчивыми и устойчивыми.

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

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

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

Полный перечень особенностей приводится в разделе 2. Особенности предлагаемого варианта технологии, а полный перечень достоинств в разделе 3. Достоинства предлагаемого варианта технологии. В данной статье просто нельзя объять необъятное море информации по данной теме! И все вопросы по теории, после изучения всей научной литературы автора, надо задавать лично Анатолию Шалыто на ящик .

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

7. Примеры Автоматного Программирования

7.1. Пример на понимание

Состояние - это просто режим, в котором находится система. Например, вода имеет 3 состояния: пар - жидкость – лед. Переход из состояния в состояние под воздействием одной величины - температуры (при постоянном давлении).

Пусть задан график во времени Температура (t) (в нашем случае - цена котировки):

int STATUS=0; // обязательно глобальная целая всегда переменная !!! STATUS - это многозначный флаг
//----------------------------------------------------------------------------------------------//
int start() // обязательное наличие внешнего цикла
  {
   switch(STATUS)
     {
      case 0:  //--- стартовое  состояние программы
         if(T>0 && T<100) STATUS=1;
         if(T>=100)       STATUS=2;
         if(T<=0)         STATUS=3;
         break;

      case 1:  //---  жидкость
         // набор вычислений или действий в этой обстановке (повтор 1 статуса -- петля в автоматном программировании) //
         // и вызовы других вложенных автоматов A4, A5;
         if(T>=100 )      { STATUS=2; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         if(T<0)          { STATUS=3; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         // протоколирование переходов и действий при выполнении условия.
         break;

      case 2:  //--- газ
         // набор вычислений или действий в этой обстановке (повтор 2 статуса -- петля в автоматном программировании) //
         // и вызовы других вложенных автоматов A4, A5;
         if(T>0 && T<100) { STATUS=1; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         if(T<=0)         { STATUS=3; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         // протоколирование переходов и действий при выполнении условия.
         break;

      case 3:  //--- лед
         // набор вычислений или действий в этой обстановке (повтор 3 статуса -- петля в автоматном программировании) //
         // и вызовы других вложенных автоматов A4, A5;
         if(T>0 && T<100) {STATUS=1; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         if(T>=100)       {STATUS=2; /* набор действий при переходе, вызовы других вложенных автоматов A2, A3;*/}
         // протоколирование переходов и действий при выполнении условия.
         break;
     }
   return(0);
  }

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

Этот Автомат с 32 = 9 условий переходов - просто вообще ничего нельзя забыть или пропустить. Этим стилем также очень удобно писать даже любые инструкции и законы! Никаких лазеек и обходов закона тут допустить невозможно, охватывается все комбинации вариантов развития, описываются все случаи.

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

Если в системе N состояний (кроме 0 старта), то всех условий переходов N2.

Диаграмма переходов: N = 3 состояний, переходов и петель N2 = 9 (равно количеству стрелок).

Если в примере было бы другое количество переменных, то:

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

Даже если два параметра, то очень трудно все описать! Но на практике все проще! В зависимости от логики и смысла, 50-95% переходов физически не могут быть, и состояний тоже на 60-95% меньше. Этим смысловым и логическим анализом очень сокращается трудность описания всех переходов и состояний.

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

7.2. Реле с гистерезисом

Очень удобно программировать реле, триггеры, регистры, счетчики, дешифраторы, компараторы и прочие нелинейные цифровые и аналоговые элементы системы управления в советнике.

  • xmax = 100 - максимальный порог срабатывания реле;
  • xmin = -100 - минимальный порог срабатывания реле;
  • x = x(t) - сигнал на входе;
  • Y = Y(t) - сигнал на выходе.
int   status=0;  // в начале программы глобально присвоим
//------------------------------------------------------------------//
switch(status)
  {
   case 0: //  старт  
      Y=x;
      if(x>xmax)  {status=1;}
      if(x<xmin)  {status=2;}
      break;

   case 1: //++++++++++++++++++++
      if(x>xmax)  Y=x;
      if(x<xmax)  Y=xmin;
      if(x<=xmin) {status=2; Y=xmin;}
      break;

   case 2: //--------------------
      if(x<xmin)  Y=x;
      if(x>xmin)  Y=xmax;
      if(x>=xmax) {status=1; Y=xmax;}
      break;
  }

Релейная характеристика:

7.3. Шаблон на 9 состояний и 81 вариант развития событий

Y - это текущее входное состояние автомата с 1 по 9. Формируется величина Y в советнике за пределами этой подпрограммы. MEGASTATUS - это прошлое состояние Y.

int MEGASTATUS=0; // в начале программы глобально присвоим
//---------------------------------------------------------------------//
void A0(int Y) // шаблон автомата
  {
   switch(MEGASTATUS)
     {
      case 0:  // стартовое
          MEGASTATUS=Y;
          break;

      case 1: // было прошлое
          // стало текущее, повтор
          if(Y=1) { /*набор действий в этой обстановке,вызовы других вложенных автоматов A2, A3, ... */ } // Петля//
          // стало текущее иное
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 2: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          // например, если невозможен или не существует по сути задачи переход от 2 к 6, то и не пишем совсем
          if(Y=6) { /* набор действий в этой обстановке */ }
          // тогда будет сокращен автомат, но шаблон автомата должен быть полным, чтобы ничего не забыть
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 3: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 4: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 5: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 6: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 7: // было   прошлое  
          //стало  текущее  
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 8: // было прошлое
          // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ } //Петля//
          if(Y=9) { /* набор действий в этой обстановке */ }
          // протоколирование переходов и действий при выполнении условия.
          break;

      case 9: // было прошлое
         // стало текущее
          if(Y=1) { /* набор действий в этой обстановке */ }
          if(Y=2) { /* набор действий в этой обстановке */ }
          if(Y=3) { /* набор действий в этой обстановке */ }
          if(Y=4) { /* набор действий в этой обстановке */ }
          if(Y=5) { /* набор действий в этой обстановке */ }
          if(Y=6) { /* набор действий в этой обстановке */ }
          if(Y=7) { /* набор действий в этой обстановке */ }
          if(Y=8) { /* набор действий в этой обстановке */ }
          if(Y=9) { /* набор действий в этой обстановке */ } //Петля//
          // протоколирование переходов и действий при выполнении условия.
          break;
     }
   MEGASTATUS=Y;
  }

7.4. Автомат аудиопроигрывателя

Рассмотрим Простой аудиопроигрыватель.

Данное устройство может находиться в 6 состояниях:

  1. Готов к работе (Ready);
  2. Нет треков (NO TRACK);
  3. Играет трек (Playing);
  4. Прокрутка трека вперед;
  5. Прокрутка трека назад;
  6. Пауза (Pause).

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

switch(STATUS)
  {
   case 0: //--- "Готов к работе"
      if(Event == 3) { STATUS = 3; } //Нажата кнопка «>>»
      if(Event == 6) { STATUS = 1; } //Не найден музыкальный файл 
      if(Event == 1) { STATUS = 2; } //Нажата кнопка «PLAY»
   
      z1();  // Установить индикатор в начальное состояние
      break;

   case 1: //--- "Нет треков"
      z6();  // Выдать сообщение «NO TRACK»
      break;

   case 2: //--- "Играть трек"
      if(Event == 4) { STATUS = 4; } //Нажата кнопка «<<»
      if(Event == 5) { STATUS = 5; } //Нажата кнопка «PAUSE»( | | )
      if(Event == 3) { STATUS = 3; } //Нажата кнопка «>>»
      if(Event == 2) { STATUS = 0; } //Нажата кнопка «STOP»
      z2(); // Играть трек
      break;

   case 3: //--- "Прокрутка трека вперед"
      z3();  // Перейти на один трек вперед
      { STATUS=2; }
      break;

   case 4: //--- "Прокрутка трека назад"
      z4(); // Перейти на один трек назад
      { STATUS=2; }
      break;

   case 5: //--- "Пауза"
      if(Event == 5) { STATUS = 2; } //Нажата кнопка «PAUSE»
      if(Event == 1) { STATUS = 2; } //Нажата кнопка «PLAY»
      if(Event == 2) { STATUS = 0; } //Нажата кнопка «STOP»
      if(Event == 3) { STATUS = 3; } //Нажата кнопка «>>»
      if(Event == 4) { STATUS = 4; } //Нажата кнопка «<<»
      z5(); //Приостановить проигрывание
      break;
  }

Теоретически в этом автомате могло бы быть 36 вариантов переходов, но реально всего 15, и все подробности описаны у автора.

8. Рекомендации Шалыто А.А. по выполнению проектов

Как правильно составлять проект и оформлять проектную документацию, можно почитать на сайте http://project.ifmo.ru/books/3, я привожу вам краткую выдержку:

  1. В качестве прототипа можно взять книгу Шалыто А.А. "Логическое управление. Методы аппаратной и программной реализации алгоритмов. СПб.: Наука, 2000", которая выложена на этом сайте в разделе "Книги". Она оформлена правильно, так как выпущена старейшим и авторитетнейшим издательством в России.
  2. Во введении должна быть обоснована актуальность выбранной темы, кратко сформулирована решаемая задача, указаны язык программирования и операционная система, использованные в проекте.
  3. В разделе "Постановка задачи" должно быть приведено подробное словесное описание решаемой задачи. Приведены рисунки, чертежи и скриншоты, поясняющие постановку задачи.
  4. В разделе "Проектирование" при использовании объектно-ориентированного стиля программирования должна приводиться диаграмма классов. Основные классы должны быть подробно описаны. Для каждого из них желательно разработать "Структурную схему класса", отражающую его интерфейс и используемые методы, с указанием какие из них являются автоматными.
  5. В разделе "Автоматы" для каждого автомата должны быть приведены три документа: словесное описание, схема связей автомата, граф переходов.
  6. Словесное описание должно быть весьма подробным, но так как поведение сложного автомата понятно не описать, то она обычно представляет собой "декларацию о намерениях".
  7. Схема связей автомата подробно описывает его интерфейс. На этой схеме слева должны быть показаны:
    • источники информации;
    • подробное название каждой входной переменной;
    • подробное название каждого события;
    • предикаты с номерами состояний других автоматов, которые используются в рассматриваемом автомате в качестве входных воздействий. Например, может применяться предикат Y8 == 6, принимающий значение равное единице, когда восьмой автомат перейдет в шестое состояние);
    • входные переменные, обозначаемые как x с соответствующими индексами;
    • события, обозначаемые, как e с соответствующими индексами;
    • переменные для хранения состояний автомата с номером N, обозначаемые как YN.

    В схеме связей справа должны быть показаны:
    • выходные переменные, обозначаемые, как z с соответствующими индексами;
    • подробное название каждой выходной переменной;
    • события, порождаемые рассматриваемым автоматом (если они имеются);
    • подробное название каждого порождаемого события;
    • приемники информации.
  8. В разделе "Вычислительные алгоритмы" при использовании в вершинах или на переходах сложных вычислительных алгоритмов обосновывается их выбор и приводится их описание (в том числе и математическое). Эти алгоритмы обозначаются переменными x и z в зависимости от того, где выполняются вычисления: на входе или на выходе.
  9. В разделе "Реализация" должны быть описаны особенности реализации программы. В частности, должен быть приведен шаблон для формальной и изоморфной реализации автоматов. Здесь же должны быть приведены реализации автоматов.
  10. В "Заключении" описываются достоинства и недостатки выполненного проекта. Могут указываться пути его совершенствования.

9. Заключение

Призываю всех Вас:

  • Изучить новое направление в программировании.
  • Внедрить на практике это совершенно новое и очень интересное направление программирования ваших идей и торговых стратегий.

Я надеюсь, что Автоматное программирование должно:

  • Со временем сделаться стилем и стандартом программирования и проектирования для всех трейдеров и даже разработчиков MetaQuotes Language.
  • Быть базовым при принятии сложных решений при проектировании советника.
  • Дать развитие в будущем нового языка в стиле Автоматного Программирования MetaQuotes Language 6 и новой платформы MetaTrader 6.

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

И еще, я целиком присоединяюсь к статье автора и считаю важным дать вам ее в сокращенном виде (полный текст http://is.ifmo.ru/works/open_doc/):

Почему исходные тексты не решают проблему понимания программ?

Центральный вопрос в практике программирования - вопрос о понимании программных текстов. Всегда хорошо иметь исходники, но проблема состоит в том, что зачастую их недостаточно. Чтобы понять некоторую нетривиальную программу, обычно требуется дополнительная документация. Эта потребность растет экспоненциально с ростом объема кода.

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

Каждый, кто участвовал в крупном проекте по реконструкции ПО, навсегда запомнит то чувство беспомощности и потерянности, которое испытываешь, когда впервые видишь гору плохо документированных (но не всегда плохо написанных) исходных текстов. Доступность исходных текстов не слишком помогает, когда отсутствует доступ к ключевым разработчикам. Если программа написана на сравнительно низкоуровневом языке и плохо документирована, то все основные проектные решения обычно растворяются в деталях кодирования и требуют реконструкции. В таких ситуациях ценность документации более высокого уровня, такой как спецификация интерфейсов и описание архитектуры, может превышать ценность самого исходного текста.

Осознание неадекватности исходных текстов для понимания программ привело к попыткам объединить код и документацию более высокого уровня.

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

Почему программы не проектируются?

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

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

В программировании сложилась ситуация, определяемая так: "Если бы строители строили дома так, как программисты пишут программы, достаточно было бы одного единственного дятла, чтобы разрушить цивилизацию".

Почему на аппаратуру выпускается море подробной и внятной проектной документации, в которой специалист средней квалификации может сравнительно быстро разобраться и изменить ее даже через много лет после выпуска, а для программ такая документация либо вовсе отсутствует, либо она пишется чисто формально, и для ее корректировки (если разработчик отсутствует) требуется специалист более высокой квалификации?

Видимо, причина такого состояния дел заключается в следующем. Во-первых, аппаратуру разрабатывают одни люди (организации), а изготавливают другие. Поэтому при некачественной документации разработчик проведет на "заводе" остаток жизни, чего ему делать явно не хочется. При создании программ имеет место другая ситуация, так как в этом случае обычно и разработчик, и изготовитель программ — одно и то же лицо, и поэтому какую номенклатуру документов ни создавай, их содержимое будет, как правило, весьма поверхностным.

Во-вторых, аппаратура — "жесткая", а программа — "мягкая". Это упрощает внесение изменений в программу, но не служит основанием для того, чтобы вовсе не выпускать проектную документацию. Известно, что большинство программистов патологически не желают читать и уж тем более писать документацию.

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

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

Вопрос о качестве документации на программное обеспечение приобретает все большее социальное значение. Разработка программ все больше напоминает шоу-бизнес с его погоней за прибылью. Все делается в дикой спешке, без раздумий о том, что будет с продуктом в будущем. Как и в шоу-бизнесе, в программировании используются критерии "выгодно и невыгодно", а не "хорошо и плохо". В большинстве случаев хороша не та технология, которая действительно хороша, а та, которая выгодна.

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

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

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

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

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

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

Основные книги-учебники автора Шалыто А.А:

  1. Автоматное программирование. http://is.ifmo.ru/books/_book.pdf
  2. Использование граф-схем и графов переходов при программной реализации алгоритмов логического управления. http://is.ifmo.ru/download/gsgp.pdf
  3. Автоматное программирование. http://is.ifmo.ru/works/_2010_09_08_automata_progr.pdf
  4. Преобразование итеративных алгоритмов в автоматные. http://is.ifmo.ru/download/iter.pdf
  5. switch-технология — автоматный подход к созданию программного обеспечения "реактивных" систем. http://is.ifmo.ru/download/switch.pdf
  6. Автоматное проектирование программ. Алгоритмизация и программирование задач логического управления. http://is.ifmo.ru/download/app-aplu.pdf
  7. Построение автопилота для упрощенной модели вертолета с помощью генетического алгоритма. http://is.ifmo.ru/works/2008/Vestnik/53/05-genetic-helicopter.pdf
  8. Программирование с явным выделением состояний. http://is.ifmo.ru/download/mirpk1.pdf
  9. Алгоритмизация и программирование для систем логического управления и "реактивных" систем. http://is.ifmo.ru/download/arew.pdf
  10. Объектно-ориентированный подход к автоматному программированию. http://is.ifmo.ru/works/ooaut.pdf
  11. Графическая нотация наследования автоматных классов. http://is.ifmo.ru/works/_12_12_2007_shopyrin.pdf
  12. Программирование за... 1 (одну) минуту. http://is.ifmo.ru/progeny/1minute/?i0=progeny&i1=1minute

В примерах проектов:

  1. Моделирование работы банкомата. http://is.ifmo.ru/unimod-projects/bankomat/
  2. Моделирование процесса управления ядерным реактором. http://is.ifmo.ru/projects/reactor/
  3. Система управления лифтом. http://is.ifmo.ru/projects/elevator/
  4. Разработка системы управления кофеваркой на основе автоматного подхода. http://is.ifmo.ru/projects/coffee2/
  5. Проектирование и исследование автоматов для решения задачи управления автомобилем. http://is.ifmo.ru/projects/novohatko/
  6. Моделирование цифрового фотоаппарата на основе автоматного программирования. http://project.ifmo.ru/shared/files/200906/5_80.pdf
  7. Применение автоматного программирования при моделировании мультиагентной системы беспилотных автомобилей. http://project.ifmo.ru/shared/files/200906/5_41.pdf
  8. Наглядная система сборки Кубика Рубика. http://is.ifmo.ru/projects/rubik/

и прочие интересные статьи и проекты: http://project.ifmo.ru/projects/, http://is.ifmo.ru/projects/ и http://is.ifmo.ru/works/.

P.S.

Число возможных различных событий кубика Рубика равно (8! × 38−1) × (12! × 212−1)/2 = 43 252 003 274 489 856 000. Это число не учитывает то, что ориентация центральных квадратов может быть разной.

С учётом ориентации центральных квадратов количество событий возрастает в 2048 раз, до 88 580 102 706 155 225 088 000.

У рынка Форекс или биржи намного меньше вариантов развития событий, но у них их задача решается легко за 100-200 шагов этим стилем программирования. Да! Рынок и советник соревнуются между собою как в шахматах, там никто не знает будущие ходы соперника (всё как у нас), но ведь созданы крутые программы типа Rybka (сильнейшая шахматная программа) на алгоритмах альфа-бета отсечения.

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


Последние комментарии | Перейти к обсуждению на форуме трейдеров (54)
[Удален] | 3 дек. 2012 в 07:50

GOURO Hamady DIALL | 3  декабря, 2012


НАУКА УПРАВЛЕНИЯ ФИНАНСОВЫМ РЫНКОМ  


В статье описывается современное плачевное положение дел в теории Форекс. Практика некая вроде бы есть, но нет всеобщей, описывающей ФОРЕКС Единой Научной Теорией. Описываются причины создания новой науки ФОРЕКСОЛОГИИ. 



Κάλλιο αργά παρά ποτέ
Лучше поздно, чем никогда

Введение

Всем известна басня Ивана Крылова  «Лебедь, Рак, Щука» (1814 год):

Когда в товарищах согласья нет,
На лад их дело не пойдет,
И выйдет из него не дело, только мука.


Однажды Лебедь, Рак да Щука
Везти с поклажей воз взялись
И вместе трое все в него впряглись;
Из кожи лезут вон, а возу все нет ходу!

Поклажа бы для них казалась и легка:
Да Лебедь рвется в облака,
Рак пятится назад, а Щука тянет в воду.
Кто виноват из них, кто прав - судить не нам;
Да только воз и ныне там.                                                                                                                                                

  

С момента автоматизации любых  Бирж и Форекс  все трейдеры, как  "Лебедь, Рак да Щука" без опоры и  без основы  (без Фундаментальной и Прикладной Научно-теоретической  базы) пытаются чего-то невнятное создать, типа советника, с «крутой»  стратегией управления, который чего-то делает с лонгами и шортами. А в итоге многие сливают депозит.    И на этом ….ничего не выходит…… Да только воз и ныне там.          

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

А успешный трейдер, кто не сливает депозит,  боится  и дрожит,  чтоб… не слился его возросший капитал. И знает  по опыту,  что  

Рост капитала в прошлом, не гарантия роста капитала в будущем.

Но почему одни сливают  сразу, другие потом?   Есть  при любом выросшем в прошлом  депозите  вероятностью в будущем потерь и слива!  


1. Причины постоянных неудач  

Все заключается в том  -  что все трейдеры!  без Строгой  Научной Теории лезут (в воду не зная брода)  в  практику!  

И почему-то упорно досконально изучают только один график,  а система управления «СОВЕТНИК», не изучена  подробно и  в полном небрежении у трейдеров. Все индикаторы дают сигналы от графика, приказы  идут от  советника, т.е.  это показывает  полное и непрерывное  взаимодействие  двух систем внешней и внутренней.

В  моей  первой статье  "Автоматное программирование как новый способ создания автоматических торговых систем"   есть ссылки на  автопилот управления вертолетом и движение машины в векторном пространстве. Это  аналогия   с нашим советником, посмотрите эти ссылки, и изучите, как  правильно программируются эти аналогии взаимодействия внешних и внутренних систем.

Рост депозита - это  однозначное  и единственно правильное  взаимодействие двух систем (рынка  и советника), слив наоборот.

 

То, что известно на сей день (индикаторы, всякие стратегии)….. это все не полное представление, это капля в море!

99,999%  научных  данных, закономерностей и  законов, формул, теорем, доказательств, выводов,  определений Форекс и проч. просто пока нет, и никто об этом не знает и думают чего- то достигнуть на практике! 

Без полной и всеобъемлющей теории пользоваться практикой  также глупо, как создавать Ядерный Реактор без СКОРПУЛЕЗНОГО  знания атомной ФИЗИКИ, или Хирургу оперировать больного без Высшего Медицинского Образования или  водить машину без знания теории ПДД, или обезвреживать мину  Сапером без знаний своего дела. 

Взрыв реактора и мины, Смерть больного или Авария на дороге гарантирована в будущем, т.е. по-нашему полный  СЛИВ: 

  

Везти с поклажей воз взялись
И вместе трое все в него впряглись;
Из кожи лезут вон, а возу все нет ходу!

Поэтому  равнодействующая  сила   стратегий  многих трейдеров  по басне  «Лебедь, Рак, Щука»  равно нулю.

Причины  указаны:

Поклажа бы для них казалась и легка:
Да Лебедь рвется в облака,
Рак пятится назад, а Щука тянет в воду.
Кто виноват из них, кто прав - судить не нам;
Да только воз и ныне там.     
           

                                                                                                                                 

Столько в мире талантливых умных и трейдеров, но никто не создал ЕДИНСТВЕННЫЙ ПРАВИЛЬНЫЙ СОВЕТНИК, отвечающий заранее поставленным целям.
Например, постановка задачи на разработку:

Требуется создать советник с монотонным  ростом депозита во времени,  на любом финансовом инструменте, на 1 минутном графике, при заданном спреде=3, плече=500 и максимальной просадке < 5% и минимальном профит-факторе > 2 и стартовом капитале=10000!

Вот так, чтобы такое было в будущем  возможно, нужна Глобальная Теория Форекса, а не только некая многолетняя практика!     Даже все академики и ученые мира, тут не помогут, если не будет ЕДИНОЙ БАЗОВОЙ ТЕОРИИ, и НАУКИ как таковой! 
 

Сказано:

Когда в товарищах согласья нет,
На лад их дело не пойдет,
И выйдет из него не дело, только мука.


И чтоб не мучиться зря никому  - нужно Согласие, т.е.  Закон или  Наука  или точнее  Научное Согласие всех  систем в советнике, работающего непрерывно  на рынке. 

Таким образом, чтобы суметь исправить это НЕСОГЛАСИЕ  рынка и советника, нужна специальная наука.

Она должна быть строго научно – теоретической  и прикладной, включающей в себя как раздел  «технический анализ»,  так и новые направления исследования. В ней должно быть собрано все лучшее, что удалось найти... 

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

 Назовем эту науку  ФОРЕКСОЛОГИЯ.

  

2. ФОРЕКСОЛОГИЯ

 Дадим определение этой науке:

ФОРЕКСОЛОГИЯ – эта техническая  наука, изучающая подробно все процессы происходящие  в ФОРЕКС, и исследующее  явления всесторонне все элементы ( рынок и  советник)  Форекс и их взаимодействие между собой.

 ФОРЕКСОЛОГИЯ направленна на выработку и теоретическую систематизацию объективных знаний о ФОРЕКС. Основой этой деятельности является сбор фактов, их постоянное обновление и систематизация, критический анализ и, на этой базе, синтез новых знаний или обобщений, которые не только описывают наблюдаемые в ФОРЕКС, но и позволяют построить причинно-следственные связи. Теории и гипотезы, которые подтверждаются фактами или опытами, формулируются в виде законов ФОРЕКС.

 

Можно выделить три основных направления в научных исследованиях:

  • Фундаментальные научные исследования — это глубокое и всестороннее исследование предмета с целью получения новых основополагающих знаний, а также с целью выяснения закономерностей выясняемых явлений, результаты которых не предполагаются для непосредственного промышленного использования. Термин фундаментальность (на латыни fundare — «основывать») отражает направленность этих наук на исследование первопричинных, основных законов природы.
  • Прикладные научные исследования — это такие исследования, которые используют достижения фундаментальной науки, для решения практических задач. Результатом исследования является создание и совершенствование новых технологий.
  • Научно-исследовательские и опытно-конструкторские разработки (НИОКР) — здесь соединяется наука с производством, тем самым обеспечивая как научные, так и технические и инженерные проработки данного проекта. Иногда полученные результаты могут привести к научно-технической революции.

 

3.  Научное исследование: его сущность и особенности


 Всякое научное исследование — от творческого замысла до окончательного оформления научного труда — осуществляется весьма индивидуально. Но все же можно определить общие методологические подходы к его проведению.

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

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

 

Изучать в научном смысле — это значит быть научно объективным. Нельзя отбрасывать факты в сторону только потому, что их трудно объяснить или найти им практическое применение. Дело в том, что сущность нового в науке не всегда видна самому исследователю. Новые научные факты и даже открытия из-за того, что их значение плохо раскрыто, могут долгое время оставаться в резерве науки и не использоваться на практике.

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

 

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

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

 Объектом научно-теоретического исследования выступают не просто отдельное явление, конкретная ситуация, а целый класс сходных явлений и ситуаций, их совокупность.

Цель, непосредственные задачи научно-теоретического исследования состоят в том, чтобы найти общее у ряда единичных явлений, вскрыть законы, по которым возникают, функционируют, развиваются такого рода явления, т. е. проникнуть в их глубинную сущность.

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

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

 

 

4. Прикладной  результат ФОРЕКСОЛОГИИ 

Главным Прикладным практическим  результатом ФОРЕКСОЛОГИИ  является задача  создания  программного устройства, или системы автоматического  управления  - советник, отвечающий заранее определенным критериям и целям.

 

Определим в ФОРЕКСОЛОГИИ, что такое советник:

 

Советник   -  это программная реализация   системы  автоматического  управления  (открытия и закрытия)  множеством позиций  лонг и шорт,  в зависимости от внешней среды (график цены)  для достижения определённой цели  (рост эквити)  при   постоянном ограничении  ( остаток свободных средств).

 

Можно уподобить автоматическую систему управления Ветрогенератору:

                                                                                                                                                                  

 

                                                                                                                                                             

 

Рынок - это ветер, скорость ветра - это размах трендов графика, ураганы и штормы - ГЭПы, а штиль – флет,    Количество лонгов и шортов - количество лопастей,   а  сумма лонгов или шортов - это площадь лопастей, обметаемая ветром,

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

                                                               

Главное ветрогенератору:   всё равно откуда  и куда  дует ветер !   он в принципе  не прогнозирует,  куда будет дуть ветер  через пять минут или  день, год.

 

 Также   можно  уподобить  автоматическую  систему    управления    Выпрямителю:

                                                                                                                                                       

 

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

Период  сигнала  - это  период  от локальных прошлых  максимумов  ( минимумов)   рынка  до  текущих максимумов ( минимумов).

                                                                       

   Главное выпрямителю:   не важно, какой формы  сигнал на входе :   чистый синус или меандр, случайный или  нестационарный фрактальный.

 

Также   можно  уподобить  автоматическую  систему    управления    Автомашине:

                                                                                                                    

 Руль - главное  устройство при реализации принятия решения водителем.

Траектория  по извилистой дороге – график.

Люфт  руля, шероховатость дороги  -   шумы тиков, минутных  баров.

Полный Бензобак  с топливом -  стартовый капитал.

Текущий уровень топлива -  остаток свободных средств.

Газ - увеличение  позиций лонгов и шортов.

Торможение  - уменьшение позиций лонгов и шортов.

Стоянка - нет позиций.

Остановка – позиции разнонаправлены и равны.

Поворот налево  -минимум графика.

Поворот направо - максимум графика.

Прямо или Прямая ровная  дорога - хороший тренд.   

 

…..далее Вы должны сами дополнить…..

 

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

 

Для  полного  изучения  советника с "нуля" можно заменить его моделью черного ящика.  

Черный Ящик - объект, внутренняя структура которого неизвестна или неважна в рамках решаемой задачи, но о функциях которого можно судить по его реакциям на внешнее воздействие.
Полное описание функций «черного ящика» называется его каноническим представлением. «Чёрные ящики», характеризуемые одинаковыми каноническими представлениями, считаются эквивалентными.
В отличие от «черного ящика» «белый ящик» — это объект, внутренняя структура которого нам полностью известна.

Понятие «чёрный ящик» широко используется во многих научных дисциплинах, в первую очередь технических, при изучении и/или описании любых объектов, обладающих относительно устойчивым характером (без учёта развития или изменения самого объекта). Это обусловлено тем, что «чёрный ящик» является наглядной формой представления результата основного процесса человеческого мышления — абстрагирования, и использование «чёрного ящика» при описании объекта значительно облегчает понимание смысла.

  

 5.  Модель «Черного ящика»

  

Приступая к изучению новой, неизвестной системы, мы не знаем, с чем имеем дело. В этом случае представление об объекте исследования может дать некоторое описание его свойств.

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

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

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

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

Как видим, составив три описания системы, мы получаем упорядоченную информацию об интересующем нас объекте.

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


Тем не менее в теории, да и в практике часто бывает достаточно иметь только часть информации об объекте. Например, когда мы не знаем текущего цифрового значения точного времени (проблема – незнание точного времени, цель – не опоздать куда-либо), то достаточно посмотреть на часы, не задумываясь при этом об их внутреннем устройстве и источнике поступления энергии для их работы.

В приведенном примере назначение часов (цель их существования) – показывать точное время в произвольный момент и тем самым воздействовать на внешнюю по отношению к ним среду.

Графически отмеченные взаимодействия системы с внешней средой представлены на рис.

 

                                                                                                                            





Содержимое системы в данном случае не известно (или не представляет интереса для внешней среды), но этого достаточно для решения возникшей проблемы.

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

Понятие «черный ящик» было предложено У. Р. Эшби. В кибернетике оно позволяет изучать поведение систем, т. е. их реакций на разнообразные внешние воздействия, и в то же время абстрагироваться от их внутреннего устройства. Таким образом, система изучается не как совокупность взаимосвязанных элементов, а как нечто целое, взаимодействующее со средой на своих входах и выходах. Метод «черного ящика» применим в различных ситуациях.

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

Исследование с помощью метода «черного ящика» заключается в том, что осуществляется предварительное наблюдение за взаимодействием системы с внешней средой и установление списка входных и выходных воздействий, среди которых выделяются существенные воздействия. Затем осуществляется выбор входов и выходов для исследования с учетом имеющихся средств воздействия на систему и средств наблюдения за ее поведением.

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

В настоящее время известны два вида «черных ящиков». К первому виду относят любой «черный ящик», который может рассматриваться как автомат, называемый конечным или бесконечным. Поведение таких «черных ящиков» известно.

Ко второму виду относятся такие «черные ящики», поведение которых может быть наблюдаемо только в эксперименте. В таком случае в явной или неявной форме высказывается гипотеза о предсказуемости поведения «черного ящика» в вероятностном смысле. Без предварительной гипотезы невозможно любое обобщение или, как говорят, невозможно сделать индуктивное заключение на основе экспериментов с «черным ящиком».

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

Следует подчеркнуть, что главной причиной множественности входов и выходов модели «черного ящика» является то, что всякая реальная система, как и любой объект, взаимодействует с объектами внешней среды неограниченное число раз и по разному поводу.



6. Моделирование и определение системы

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

Каждая теория – это тоже модель понимания содержания предмета исследования. Модели могут создаваться на основе средств познания (формы мышления) – эвристические, гипотетические, концептуальные и на основе рационально-логических средств исследования – эмпирические, теоретические, математические.

Существует много определений моделей. Особенно в этом преуспели математики, создавшие теорию моделей. Чаще всего под моделью понимают некий объект-заменитель, который в определенных условиях может заменять объект-оригинал, воспроизводя интересующие нас свойства и характеристики оригинала. Причем здесь существенное преимущество имеют удобства, т. е. модель представляет собой отображение каким-либо способом существенных характеристик объектов, процессов и их взаимосвязей с реальными системами. В основе моделирования лежит принцип аналогии.
Аналогия – подобие, сходство предметов в каких-либо свойствах, признаках, отношениях.


Убедившись в аналогичности двух объектов, предполагают, что функции, свойства одного объекта присущи другому объекту, для которых они не установлены. Метод аналогий состоит в том, что изучает один объект – модель, а выводы переносятся на другой – оригинал. Иначе говоря, аналогия – вывод от модели к оригиналу.

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

Среди методов упрощения, осуществляемых в процессе моделирования, можно назвать:

• исключение из рассмотрения ряда переменных – как исключение несущественных, так и за счет агрегирования переменных;

• изменение природы переменных – как за счет рассмотрения переменных в качестве констант, так и за счет рассмотрения дискретных величин как непрерывных;

• изменение характера связи между элементами (замены нелинейных зависимостей на линейные);

• изменение ограничений – как путем снятия ограничений, так и за счет введения новых.

Любая модель строится на основе некоторых теоретических принципов и реализуется определенными инструментальными средствами прикладных наук.



В теории систем широко используются специальные методы моделирования, которые применяются в прикладной информатике. К ним относятся:

• имитационное динамическое моделирование, использующее методы статистики и специальный язык программирования взаимодействия структурных элементов;

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

• информационное моделирование, использующее математические методы теории информационного поля и теории информационных цепей.

 

7. Модель состава и структуры


Как определить внутреннее устройство «черного ящика», когда это необходимо?

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

Элементы – это те части, которые рассматриваются как неделимые. Система разделяется на элементы различными способами в зависимости от формулировки задачи, цели и конкретизации в процессе анализа. Иногда изменяют принцип разбиения, выделяя другие элементы.

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

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


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

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

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

Связь – совокупность зависимостей свойств одного элемента от свойств других элементов системы. Установить связь между двумя элементами – значит, выявить наличие зависимостей их свойств.

Взаимодействие – совокупность взаимосвязей и взаимоотношений между свойствами элементов, когда они приобретают характер взаимодействия друг с другом.

В философии учение о связях – основное понятие при описании явлений и процессов в виде универсального и связанного целого. Связи фигурируют в законах причинности, единства и борьбы противоположностей, содержания и формы, сущности и явления.

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

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

Таким образом, структура системы – это совокупность элементов системы и связей между ними в виде множества.


Дальнейшее рассмотрение выходит за рамки статьи и  всё можно почепнуть в Теории Систем Управления. 

 

 

8.   Функция Вейерштрасса

  Все изучают график, все знают, что он фрактален, но главная его особенность в том, что  график цены  является  стохастической  Функцией Вейерштрасса.    Функция-фрактал!   Везде  непрерывна, но нигде не имеет производной!

 

 

 Вот с какими и сложностями приходиться сталкиваться трейдеру в реальности! Тут даже производную взять невозможно! 

 

Функция Вейерштрасса задается на всей вещественной прямой единым аналитическим выражением:

                                                                                                                                                                                            ,

 

где  a — произвольное нечетное число,  b — положительное число, меньшее единицы. 

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

  

 

9.  Что такое  случайность  ценовых графиков и есть ли она?  

 Существует ли в нашем мире случайность или всё , что происходит на Форексе, закономерно, то есть подчинено действию известных или пока не познанных нами законов?

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

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

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

На самом деле, всё, что мы воспринимаем как «случайность», является, всего лишь, её иллюзией.

В мире не только нет случайностей, они принципиально невозможны: все происходящие события причинно обусловлены и подчинены законам, которые на 99,9999999% нами ещё не познаны! Таким образом, мы имеем дело не со случайностью, а, исключительно, – с закономерностью.

Таким образом,


«случайность» ценовых графиков  – это мера нашего незнания законов Форекса. 

Но пока наше знание остаётся несовершенным, иллюзия случайности всегда будет иметь место в нашей жизни.  Ярким примером доказательства этого является  Функция Вейерштрасса.

И поэтому  всегда будет справедливо смиренное утверждение о том, что: « Я знаю, что ничего не знаю».

   

10. О ветре  ФОРЕКСА

 Ветер  - нетрадиционный источник энергии!

 


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

Несмотря на то, что все эти величины имеют ярко выраженные сезонные особенности, можно лишь с некоторой вероятностью спрогнозировать вероятность появления тех или иных их значений в конкретный момент времени.  Именно в этом заключается одна из основных проблем использования таких источников, казалось бы, неисчерпаемой, «дармовой» энергии нашего Солнца.

 Другая проблема использования светового, ветрового и морского  использования энергии состоит в создании высокоэффективных технических средств для преобразования их действительно безграничного (по объему и/или по мощности), но «почти неуловимого» энергетического потенциала, например, в механическую или электрическую энергию. В одних случаях этот потенциал оказывается слабым, а значит извлекать из него энергию оказывается слишком дорого (дешевле купить дизель-генератор!), в других — слишком велик, когда ломаются сами эти преобразователи, рассчитанные на некие «среднестатистические по региону» энергетические показатели. 

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

 Совершенно аналогичным образом ведут себя цены финансовых инструментов на рынке Форекс. Этот высоколиквидный, вездесущий и практически постоянно действующий процесс, обусловленный движениями больших и малых мировых социально-экономических и валютно-финансовых волн, позиционируются дилинговыми и брокерскими учреждениями именно как неисчерпаемый источник дохода — «иди и бери»! 

Однако, как мы знаем, это легко сказать, но сделать трудно: почти случайный характер ценовых колебаний разной интенсивности (от однопериодных «микроволн» до мощных трендов разной направленности), наличие транзакционных издержек, спредов, задержки исполнения ордеров и проскальзываний цены, другие «околорыночные» факторы (в том числе, мошеннические), аналогами которых в возобновляемой энергетике являются трения и люфты в механических элементах преобразователей, — все это выстраивает такие препятствия, которые наши торговые системы — эти «преобразователи» рыночной «халявной» денежной энергии, — как правило, не могут преодолеть.

 Для решения проблем, возникающих при практическом использовании природных возобновляемых источников энергии, созданы целые научные институты и кафедры в высших учебных заведениях, сформированы профильные отделы в министерствах и ведомствах и отделения в национальных академиях наук во множестве стран мира. Эти организации и органы призваны способствовать развитию научно-теоретической базы нетрадиционной энергетики и разработке конструкций эффективных преобразователей энергии, породжаемой неисчерпаемым (в известном смысле) водородно-ядерным запасом нашего Солнца. 

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

И ни одному здравомыслящему человеку  не придет в голову обвинять кого-либо в спекулятизме и осуждать его за попытки «на халяву» завладеть этой «дармовой» энергией и затем продавать ее по цене, превышающей ее себестоимость!

Другое отношение к рынку Форекс. Да, на рынке Форекс можно зарабатывать, теоретически, неограниченно много и постоянно. Такая теоретическая возможность, обусловливается тем, что котировки валют все время как-то меняются, образуя на ценовых графиках подобия волн — цены то повышаются, то понижаются, в чем-то подобно морским периодическим или даже приливно-отливным волнам. Но невольно они привлекают к себе внимание и общественности, которая в массе своей, как известно, состоит из завистников и  трейдеров неудачников, которые лишь в силу утверждений самих брокеров о легкости и грандиозности заработков на рынке Форекс вешают на него ярлык спекулятивной и мошеннической конторы, и называют это ИГРОЙ.  А те, кто вплотную соприкоснулся с реалиями  на Форексе, на собственной шкуре испытывают «легкость» получения такой прибыли. Вспомним золотоискателей, работавших, как проклятые, и порою клавших свои жизни на враждебных рудниках ради блеска крупиц намытого золота! А сегодня, благодаря научно-техническим достижениям, разработка золотоносных пород ведется в промышленных масштабах, и никому,  не приходит в голову обвинять золотодобывающие компании в спекулятизме.


Заключение

Каждый  должен  создать свой  ветрогенератор  или выпрямитель,  но  для этого  надо  очень   серьезно  изучать и заниматься  Фундаментальными и Прикладными исследованиями в Форекс.

Все биржи и Форекс нуждаются не столько в техническом, сколько в научно-техническом анализе.

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

Дополняйте и пополняйте новою науку.....  своими идеями и исследованиями!

  

PS

В прикладных вопросах программной реализации советника можно  и нужно применять «Автоматное программирование», приведенное в  моей первой  статье    «Автоматное программирование как новый способ создания автоматических торговых систем»

 Если вдруг моим критикам, и иным читателям, кому вообще Наука в Форексе не нужна, и они хотят жить по-своему и по-старому,  я  скажу заранее .... " А вы, друзья, как ни садитесь ,  Всё в музыканты не годитесь". 

Я пишу об  истине  и правде,  а кому будет резать или колоть  глаза,  то пусть!  Мне главное в статье удалось донести идею и мысль для умных и талантливых, а прочие пусть по-старому советники клепают!  

и еще....

Мартышка к старости слаба глазами стала;

А у людей она слыхала,

Что это зло еще не так большой руки:

Лишь стоит завести Очки,

Очков с полдюжины себе она достала;

Вертит Очками так и сяк:

То к темю их прижмет, то их на хвост нанижет,

То их понюхает, то их полижет;

Очки не действуют никак.

"Тьфу пропасть! - говорит она, - и тот дурак,

Кто слушает людских всех врак:

Всё про Очки лишь мне налгали;

А проку на волос нет в них".

Мартышка тут с досады и с печали

О камень так хватила их,

Что только брызги засверкали.

 

К несчастью, то ж бывает у людей:

Как ни полезна вещь, - цены не зная ей,

Невежда про нее свой толк все к худу клонит;

А ежели невежда познатней,

Так он ее еще и гонит.

 

 

Литература:

Как извлекать реальные доходы из потенциальной энергии рынка Форекс?

Heroix
Heroix | 3 дек. 2012 в 10:39
MT5:

бла-бла-бла

Не удивительно, что не хотят публиковать. 
Valerii Mazurenko
Valerii Mazurenko | 3 дек. 2012 в 10:50

А есть ещё ф-ия Вейерштрасса-Мандельброта (разновидность ф-ии Вейерштрасса). Фрактальную размерность считать не так уж сложно. Остаётся только один параметр подобрать :) 

Andrew Petras
Andrew Petras | 3 дек. 2012 в 13:16
MT5:
Я хочу  добавить свою статью
о такой теме, о которой  никто и никогда  и не  думал и не рассуждал!...
Директор Форекс детектед.
Denis Lazarev
Denis Lazarev | 3 дек. 2012 в 23:56
Heroix:
Не удивительно, что не хотят публиковать. 
Тут не только нет формул, тут и смысла маловато
Торговые операции на MQL5 - это просто Торговые операции на MQL5 - это просто
Почти все трейдеры приходят на рынок для того, чтобы заработать денег, хотя есть и доля тех, кому важен не сам торговый результат, а участие в процессе, драйв. Впрочем, получить удовольствие от процесса можно не только торгуя вручную, но и занимаясь разработкой автоматических торговых систем. Ведь создание торгового робота может быть таким же интересным занятием, как и чтение хорошего детектива.
Интервью с Ириной Коробейниковой (irishka.rf) Интервью с Ириной Коробейниковой (irishka.rf)
Редко можно встретить представительниц прекрасного пола среди участников MQL5.community. Уникальный в своем роде случай подсказал идею небольшого интервью. Ирина Коробейникова (irishka.rf) - пятнадцатилетний программист из Ижевска. На данный момент она является единственной девушкой, которая принимает активное участие в сервисе "Работа" и входит в Топ разработчиков.
MetaQuotes ID в мобильном терминале MetaTrader MetaQuotes ID в мобильном терминале MetaTrader
Телефоны на базе Android и iOS предлагают нам кучу возможностей, о многих из которых мы даже не догадываемся или не пользуемся в полной мере. Одной из таких новинок является технология Push-уведомлений, которая позволяет через Интернет персонально получать сообщения независимо от номера мобильного телефона или оператора сотовой связи. В мобильном терминале MetaTrader уже реализована возможность получать такие сообщения прямо из вашего торгового робота. Для этого достаточно знать идентификатор MetaQuotes ID своего аппарата, и уже более 9 000 000 мобильных терминалов получили его.
Быстрое погружение в MQL5 Быстрое погружение в MQL5
Вы решили изучить язык программирования торговых стратегий MQL5, но ничего о нем не знаете? Мы постарались взглянуть на MQL5 и терминал MetaTrader 5 глазами новичка и написали эту небольшую вводную статью. Из неё вы сможете получить краткое представление о возможностях самого языка, а также несколько полезных советов по работе с редактором MetaEditor 5 и самим терминалом.