Здравствуйте, гость ( Вход | Регистрация )

IPB

 Обучение  трейдингу БЕСПЛАТНО!      Общение С БОНУСАМИ !!!    Подробности здесь

 Регистрация на форуме отдельная от сайта и ручная! Обращаться через КОНТАКТЫ

> Програмирование на EasyLanguage, Формальные правила, примеры и ответы на вопросы
BQQ
сообщение 29.3.2008, 18:28
Сообщение #1


Мимо проходил
*

Группа: Пользователи 
Сообщений: 47
Регистрация: 29.11.2007
Пользователь №: 223




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

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

В связи с этим замечу, что освоение EasyLanguage для непрофессионала возможно за разумное время, так как оно идет гораздо легче, чем освоение языка программирования для МТ4.

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

2. Хотел положить оригинальный продукт на английском - но не смог, так как форум ограничивает объем файла 1 Мб, а там даже после архивирования получается полтора Мб.
Надеюсь, ВладМих подскажет, как это обойти (он же выложил архив инструкции к Омеге на 7 Мб. Значит знает, как это сделать.

3. Вопросы по аккуратному тестированию и оптимизации торговых систем - в другой ветке, здесь - программные аспекты.

4. Обещаю поддерживать ветку и сравнительно оперативно отвечать на вопросы.

Качаем: EasyLanguage-Doc 800 Кб.
Некоторые файлы из этого архива, переработанные VladMih, см. ниже
Перейти в начало страницы
 
+Цитировать сообщение
 
Начать новую тему
Ответов
BQQ
сообщение 2.4.2008, 9:15
Сообщение #2


Мимо проходил
*

Группа: Пользователи 
Сообщений: 47
Регистрация: 29.11.2007
Пользователь №: 223




EasyLanguage отличается от "нормальных" языков программирования двумя особенностями.
1. Общее для всех "торговых" языков наличие переменных, представляющих из себя наращивавемые массивы, где с каждым новым баром появляется новое значение.
2. Язык разрабатывался как Easy, т.е. сведены к минимуму (я вообще пока не нашел) требующиеся от программиста действия для указания второстепенных операций вспомогательно-обеспечивающего типа.
Программисты меня поняли, для новичков (для которых, собственн этот пост и пишется) приведу сравнение текста программ индикатора MACD для МТ4 и для Омеги.

В EasyLanguage программы бывают разных типов. На первых порах и для форекса интересны функции, индикаторы, сигналы. Отмечу, что функция, индикатор и сигнал могут иметь совпадающие имена, система разберется.
Для Омеги рисование индикатора MACD обеспечивается несколькими програмами.

Собствено рисование индикатора обеспечивается индикатором
Код
{*************************************************
******************
Description    : This Indicator plots MACD
Provided By    : Omega Research, Inc. (c) Copyright 1999
**************************************************
******************}

Inputs: FastMA(5), SlowMA(34), MacdMA(5);

Plot1(MACD(Close, FastMA, SlowMA), "MACD");
Plot2(XAverage(MACD(Close, FastMA, SlowMA), MacdMA), "MACDAvg");
Plot3(Plot1 - Plot2, "MADiff")
;
{Alert Criteria}
If Plot3 Crosses Over 0 Then
    Alert("MACD has generated a bullish alert")
Else
    If Plot3 crosses under 0 Then
        Alert("MACD has generated a bearish alert");

{MACD Expert Commentary}
#BeginCmtry
    Commentary(ExpertMACD(Plot1));
#End;


Обязательные строки здесь кончаются строкой
Plot3(Plot1 - Plot2, "MADiff")

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

Функция XAverage (встроенная) вычисляет экспоненциальное среднее.
Функция MACD вычисляет разность экспоненциальных средних и выглядит так
Код
{*************************************************
******************
Description: Moving Average Convergence Divergence
Provided By: Omega Research, Inc. (c) Copyright 1999
**************************************************
******************}

Inputs: Price(NumericSeries), FastMA(NumericSimple), SlowMA(NumericSimple);

MACD = XAverage(Price, FastMA) - XAverage(Price, SlowMA);


Как видим - ничего лишнего.

/////////////////////////////////////////////

Рассмотрим индикатор MACD для МТ4, приведенный как пример текста индикатора.
Код
//+------------------------------------------------------------------+
//|                                                  Custom MACD.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property  copyright "Copyright © 2004, MetaQuotes Software Corp."
#property  link      "http://www.metaquotes.net/"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Silver
#property  indicator_color2  Red
#property  indicator_width1  2
//---- indicator parameters
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;
//---- indicator buffers
double     MacdBuffer[];
double     SignalBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,SignalSMA);
   IndicatorDigits(Digits+1);
//---- indicator buffers mapping
   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
//---- macd counted in the 1-st buffer
   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- signal line counted in the 2-nd buffer
   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
//---- done
   return(0);
  }


Читатель легко(?) найдет внутри этого текста собственно вычислительную часть - те же 2 строки.
Одна из них
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_
CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
вычисляет разность экспоненциальных средних и соответствует строке в функции MACD на Easy.
Другая
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalS
MA,0,MODE_SMA,i);
вычисляет сигнальную линию и соответствует строке в индикаторе MACD на Easy.

Три строки в начале объявляют входные параметры и задают начальные значения, а практически весь остальной текст для МТ4 решает системные задачи: объявляет буфера для рисования, связывает буфера с индексами функцией SetIndexBuffer и т.п.

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

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

===============================
Задачей этого поста было убедить читателя в том, что даже непрофессионал может создавать на Easy индикаторы и торговые системы самостоятельно с нуля (от торговой идеи), в то время как на MQL большинство непрофессионалов вынуждены ограничиваться правками в готовых текстах.

При разработке индикаторов преимущство Easy над MQL сравнительно невелико, гораздо больше оно при написании торговых систем, но об этом - в будущей ветке "Системостроительство"
Перейти в начало страницы
 
+Цитировать сообщение

Сообщений в этой теме
- BQQ   Програмирование на EasyLanguage   29.3.2008, 18:28
- - VladMih   Цитата(BQQ @ 29.3.2008, 16:28) Хотел поло...   29.3.2008, 20:33
- - BQQ   1. Я нашел за выходные русский перевод именно учеб...   31.3.2008, 8:40
- - VladMih   У меня впечатление, что текста многовато, часто с ...   31.3.2008, 9:07
- - BQQ   EasyLanguage отличается от "нормальных" ...   2.4.2008, 9:15
- - VladMih   1. Не совсем корректное сравнение. В МАКДе Омеги ч...   2.4.2008, 10:13
|- - BQQ   Цитата(VladMih @ 2.4.2008, 11:13) 1. Не с...   3.4.2008, 11:21
- - VladMih   Индикатор Мюррея для Омеги на Пауке. 2 BQQ: Быстр...   22.4.2008, 15:27
- - Сений   Пытался приделать индикатор комбинированный стохас...   6.1.2013, 17:20
|- - VladMih   Цитата(Сений @ 6.1.2013, 17:20) Пытался п...   6.1.2013, 18:03
- - Сений   Меня заинтересовал Ваш сайт, хотелось посмотреть В...   6.1.2013, 18:44
|- - VladMih   Цитата(Сений @ 6.1.2013, 18:44) У меня ко...   6.1.2013, 19:17
- - VladMih   В этом посте файлы из архива, выложенного в главпо...   19.2.2013, 19:00
- - Кутузов   Цитата(VladMih @ 19.2.2013, 20:00) В этом...   11.7.2013, 10:42
- - VladMih   Цитата(Кутузов @ 11.7.2013, 10:42) Добрый...   11.7.2013, 11:45


Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.3.2024, 18:28