Форум » Стратегии, функции. » Стратегия AG_UseLinesIndicator » Ответить

Стратегия AG_UseLinesIndicator

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

Ответов - 7

Евгений: стратегия программы блиска к задуменной. при пересечении линий выставляем два одинаковых ордера с параметрами sl и tp и дальше не торгуем до закрытия. прикрепляю код. самому не сообразить как реализовать эту стратегию. //+------------------------------------------------------------------+ //| ElderRaySystem.mq4 | //| Copyright © 2010, LeMan. | //| b-market@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010, LeMan." #property link "b-market@mail.ru" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Green #property indicator_color2 Red #property indicator_color3 Blue #property indicator_width1 3 #property indicator_width2 3 //---- input parameters extern bool ShowSeason = true; extern int season = 21; вторий индюк с числом 3 extern int ray = 0; //---- buffers double UpBuffer[]; double DnBuffer[]; double Buffer[]; int p; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorDigits(Digits); SetIndexStyle(0, DRAW_ARROW); SetIndexArrow(0,159); SetIndexBuffer(0, UpBuffer); SetIndexStyle(1, DRAW_ARROW); SetIndexArrow(1,159); SetIndexBuffer(1, DnBuffer); SetIndexStyle(2, DRAW_LINE); SetIndexBuffer(2, Buffer); switch(Period()) { case 1: p = 5; break; case 5: p = 30; break; case 15: p = 60; break; case 30: p = 240; break; case 60: p = 240; break; case 240: p = 1440; break; case 1440: p = 10080; break; case 10080: p = 43200; break; case 43200: p = 43200; break; } //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int i, limit, counted_bars = IndicatorCounted(); if(counted_bars > 0) counted_bars--; limit = iBars(NULL,0)-counted_bars; for (i = 0; i < limit; i++) { UpBuffer = 0; DnBuffer = 0; int shift = iBarShift(NULL,p,iTime(NULL,0,i)); double ma1 = iMA(NULL, 0, ray, 0, MODE_EMA, PRICE_CLOSE, i+1); double ma2 = iMA(NULL, 0, ray, 0, MODE_EMA, PRICE_CLOSE, i+2); double ma3 = iMA(NULL, p, season, 0, MODE_EMA, PRICE_CLOSE, shift+1); double ma4 = iMA(NULL, p, season, 0, MODE_EMA, PRICE_CLOSE, shift+2); if (ma3 > ma4 && Low[i+2] < ma2 && Low[i+1] > ma1) { UpBuffer = High[i+1]+10*Point; } if (ma3 < ma4 && High[i+2] > ma2 && High[i+1] < ma1) { DnBuffer = Low[i+1]-10*Point; } if (ShowSeason == True) Buffer = ma3; } return(0); } //+------------------------------------------------------------------+

Евгений: подобрал ставим индикатор из программы (AG Custom Lines) с параметрами первое 1 второе 125. получается очень похоже. осталось соединить со стратегией AG_UseLinesIndicator и опробовать. отпишитесь у кого чего получится.

Scriptong: Даже не знаю, что тут ответить... :) Вопрос то уже решен. У Вас лишь небольшая неувязка - индикатор использует стрелки (стиль DRAW_ARROW), а используется стратегия ULI (стратегия работает с линейными индикаторами). Для решения нужно либо изменить в коде исходного индикатора тип буферов на DRAW_LINE, либо с ним же использовать стратегию UAI.


Евгений: извиняюсь за свою неграматность в данном вопросе, но если есть время отпишитесь пожалуйста. на примере 7 достаточно подробно расписано как на основе линейного индикатора можно создать свою стратегию по пересечению линий индикатора. пробую на демо ничего не получается- сделки не открывает. индикатор называю AG_Custom_Lines.mq4 -код или 2 пост или ниже, стратегию ставлю ULI. подскажите что надо сделать что бы при пересечении одной линии (быстрой) более медленной открывалась позиция бай(пересекает снизу вверх) или шел (пересекает сверху вниз) , ордер выставляется при открытии следующей свечи на м15 буду очень признателен за ответ- бьюсь уже месяц ничего не получается. код второго варианта индикатора прикрепляю он уже с двумя нужными линиями. № 2 главная линия ,№0 сигнальная линия //+------------------------------------------------------------------+ //| AO+EMA_zotik indicator | //| Copyright © 2008 | //| Zot@pisem.net| //+------------------------------------------------------------------+ //---- indicator settings #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 LightSeaGreen #property indicator_color2 DimGray #property indicator_color3 Red #property indicator_width1 2 #property indicator_width2 1 #property indicator_width3 1 //---- indicator parameters extern int FastSMA=3; extern int SlowSMA=34; extern int EMA=21; extern int SlowEMA=55; extern int V=34; //---- indicator buffers double AOBuffer[]; double EMABuffer[]; double VBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexDrawBegin(1,EMA); IndicatorDigits(Digits+1); //---- indicator buffers mapping SetIndexBuffer(0,AOBuffer); SetIndexBuffer(1,EMABuffer); SetIndexBuffer(2,VBuffer); //---- name for DataWindow and indicator subwindow label IndicatorShortName("AO_Line("+FastSMA+","+SlowSMA+")+AO_MF("+EMA+","+SlowEMA+")+V("+V+")"); SetIndexLabel(0,"AO"); SetIndexLabel(1,"EMA"); SetIndexLabel(2,"V"); //---- 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++) AOBuffer=iMA(NULL,0,FastSMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowSMA,0,MODE_SMA,PRICE_MEDIAN,i); //---- signal line counted in the 2-nd buffer for(i=0; i<limit; i++) EMABuffer=iMA(NULL,0,EMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //---- V line counted in the 3-d buffer for(i=0; i<limit; i++) VBuffer=iMA(NULL,0,V,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,V,0,MODE_SMA,PRICE_MEDIAN,i); //---- done return(0); } //+------------------------------------------------------------------+

Евгений: Хвала СОЗДАТЕЛЮ программы, получилось запустить последний индюк на тестере. все работает как часы. где то в параметрах быпа не стыковка. пока тестирую- беспорно сливает в таком виде как есть. вообще замысел был такой что бы открывалось два ордере в одну сторону одновременно, оба тянулись в безубыток. первый закрывался например на 10п профита, а второй тянулся до 150п. в программе AG4 вроде все есть для этого. потому что есть движения большие а приходится фиксировать по заданным маленьким параметрам. хотя бы тралить открытые ордера в +1 профита. Подскажите как это реализовать. можт надо открыть две вкладки с одним инструментом и функции разные наложить?!? тогда на тестере не проверить. подскажите не проходите мимо.

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

Ezecaza: Спасибо за дельные советы



полная версия страницы