Програмирование на EasyLanguage, Формальные правила, примеры и ответы на вопросы |
Здравствуйте, гость ( Вход | Регистрация )
Обучение трейдингу БЕСПЛАТНО! Общение С БОНУСАМИ !!! Подробности здесь
Регистрация на форуме отдельная от сайта и ручная! Обращаться через КОНТАКТЫ
Програмирование на EasyLanguage, Формальные правила, примеры и ответы на вопросы |
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, см. ниже |
|
|
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 сравнительно невелико, гораздо больше оно при написании торговых систем, но об этом - в будущей ветке "Системостроительство" |
|
|
Текстовая версия | Сейчас: 29.3.2024, 18:28 |