| / | Форум |
|
Kostay
10.02.2009 12:30
по сигналу: фрактал (индикатор olyakish). открывается только 1 позиция, которая закрывается при обратном фрактале и сразу же открывается противоположная позиция. Цель: прокодировать стоп на минимальном или максимальном значении того фрактала по которому открылась позиция +\- 5 п.
|
|
Korey
10.02.2009 12:35
надо обязательно проверять
- ушла ли цена на момент открытия ордера на +/-5 пт от фрактала -или ловить момент для открытия когда цена в коридоре +/-5 от фрактала = ставить стопы/тэки + тогда проверять уровни заморозки |
|
Alius999
10.02.2009 19:57
Здравствуйте господа профи! Наконецто мой моск понял как устанавливать советника, но, Поставил Rabbit3 - запустил, поставил разрешение на автоматическую торговлю. Далее выскакивает подтверждение на покупку или продажу. Лот 0.01кнопки Sell и Buy неактивны, а при смене лота на 0.1 - "Недостаточно денег". Что делать. И вапще - данным советником предусмотрена торговля микролотами или нет??? |
|
amur
10.02.2009 20:20
Всем Доброго времени суток! Я тут решил закодить открытие позиций по индикатору MACD_Histogram(есть в базе http://codebase.mql4.com/ru/3917), но не могу понять как вседаки закодить правильно. пытался понять по учебнику - безрезультатно. Вобщем повыкидывал лишнего из индикатора и вот что получилось. при компиляции ошибок нет а в тестере ругается на буферы. Подскажите пожалуйста как и что исправить. //+------------------------------------------------------------------+ //| E .mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- input parameters extern string separator1 = "*** MACD Settings ***"; extern int FastMAPeriod = 12; extern int SlowMAPeriod = 26; extern int SignalMAPeriod = 9; extern double Lots = 0.01; #define arrowsDisplacement 0.0001 //---- buffers double MACDLineBuffer[]; double SignalLineBuffer[]; double HistogramBuffer[]; double bullishDivergence[]; double bearishDivergence[]; //---- variables double alpha = 0; double alpha_1 = 0; static datetime lastAlertTime; static string indicatorName; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(0, MACDLineBuffer); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, SignalLineBuffer); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID,2); SetIndexBuffer(2, HistogramBuffer); SetIndexStyle(3, DRAW_ARROW); SetIndexArrow(3, 233); SetIndexStyle(4, DRAW_ARROW); SetIndexArrow(4, 234); //---- alpha = 2.0 / (SignalMAPeriod + 1.0); alpha_1 = 1.0 - alpha; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- for(int i = ObjectsTotal() - 1; i >= 0; i--) { string label = ObjectName(i); if(StringSubstr(label, 0, 19) != "MACD_DivergenceLine") continue; ObjectDelete(label); } //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int limit; int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); //---- last counted bar will be recounted if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; CalculateIndicator(counted_bars); //---- for(int i = limit; i >= 0; i--) { MACDLineBuffer[i] = iMA(NULL, 0, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SlowMAPeriod, 0, MODE_EMA, PRICE_CLOSE, i); SignalLineBuffer[i] = alpha*MACDLineBuffer[i] + alpha_1*SignalLineBuffer[i+1]; HistogramBuffer[i] = MACDLineBuffer[i] - SignalLineBuffer[i]; } //---- return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CalculateIndicator(int countedBars) { for(int i = Bars - countedBars; i >= 0; i--) { CalculateMACD(i); CatchBullishDivergence(i + 2); CatchBearishDivergence(i + 2); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CalculateMACD(int i) { MACDLineBuffer[i] = iMA(NULL, 0, FastMAPeriod, 0, MODE_EMA, PRICE_CLOSE, i) - iMA(NULL, 0, SlowMAPeriod, 0, MODE_EMA, PRICE_CLOSE, i); SignalLineBuffer[i] = alpha*MACDLineBuffer[i] + alpha_1*SignalLineBuffer[i+1]; HistogramBuffer[i] = MACDLineBuffer[i] - SignalLineBuffer[i]; } //+------------------------------------------------------------------+ //| сигнал | //+------------------------------------------------------------------+ void CatchBullishDivergence(int shift) { int currentTrough = shift; int lastTrough = GetIndicatorLastTrough(shift); //---- if(MACDLineBuffer[currentTrough] > MACDLineBuffer[lastTrough] && Low[currentTrough] < Low[lastTrough]) { bullishDivergence[currentTrough] = MACDLineBuffer[currentTrough] - arrowsDisplacement; // OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",0,0,Red); //---- //---- //---- } //---- |
|
amur
10.02.2009 21:19
Неужели никто не может помочь мне с вопросом...
|
|
Korey
10.02.2009 22:01
нужно задать свойства
- #property буферы - #property цвета смотреть примеры в коде того же МАСД |
|
amur
10.02.2009 22:10
Korey писал(а) >>
нужно задать свойства - #property буферы - #property цвета смотреть примеры в коде того же МАСД К сожалению, не помогает.. В журнале так же пишет 2009.02.11 00:08:10 2009.01.05 00:00 E_ EURGBP,M1: SetIndexBuffer function must be called from custom indicator only Вот перевел..2009.02.11 00:08:10 2009.01.05 00:00 E_ EURGBP, M1: функция SetIndexBuffer должна быть вызвана от таможенного индикатора только |
|
Figar0
10.02.2009 22:20
amur писал(а) >>
Вот перевел..2009.02.11 00:08:10 2009.01.05 00:00 E_ EURGBP, M1: функция SetIndexBuffer должна быть вызвана от таможенного индикатора только Таможенного?) В тестере тестируют советники, а не индикаторы, а если и индикаторы, то посредством тестирования советников. А это все еще индикатор, пусть покореженый очумелыми ручками. Если хотите кодить сами, надо восполнять пробелы в знаниях, без этого никак. |
|
amur
10.02.2009 22:31
Figar0 писал(а) >>
Таможенного?) В тестере тестируют советники, а не индикаторы, а если и индикаторы, то посредством тестирования советников. А это все еще индикатор, пусть покореженый очумелыми ручками. Если хотите кодить сами, надо восполнять пробелы в знаниях, без этого никак. Уважаемый Figar0, я и пытаюсь научиться, выше и написал что не могу понять из учебника как описать буферы - вобщем чтоб советник торговал с сигналов индикатора MACD_Histogram. Потому и решил спросить поможи у Вас - профессионалов . спасибо что помогаете)) |
|
Figar0
10.02.2009 22:48
amur писал(а) >>
Уважаемый Figar0, я и пытаюсь научиться, выше и написал что не могу понять из учебника как описать буферы - вобщем чтоб советник торговал с сигналов индикатора MACD_Histogram. Потому и решил спросить поможи у Вас - профессионалов . спасибо что помогаете))
Возьмите советник, например MACD Sample, идет вместе с МТ4. Посмотрите его код. Советник использует индикатор MACD, но не имеет никаких буферов. Не так ли? Вместо этого он обращается к значениям индикатора посредством iMACD(....). Тоже самое в Вашем случае, надо не индикатор переделывать для торговли, а брать советник и переделывать его для работы с Вашим индикатором. А обращаться к значениям индикатора посредством iCustom(....) (Правила использования есть в справке и учебнике). Появятся более конкретные вопросы - спрашивайте. |