какое сравнение, для чего? код выше некорректный. Напиши конкретную цель(условия) для советника. По правильному направлению отправим
Цель сравнить последний up фрактал и предыдущий up фрактал и сравнить последний dn фрактал и предыдущий
Условие если lastUpFractal > UpFractal && lastLowFractal > lowFractal то buy
если lastUpFractal > UpFractal && lastLowFractal < lowFractal
то перенос sl всех buy ордеров под последний LowFractal
запускаешь цикл и перебираешь все элементы верхнего и нижнего буфера фракталов, как найдешь первую пару не нулевых значений с обеих сторон, сравниваешь.
Друзья Посмотрите пожалуйста
expert3.mq4 | //| Copyright © 2010. | //| http://www.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2010." #property link "http://www.ru" #include <MyLib.mqh> extern int MaxRisk=2; extern int TakeProfit=30; extern int StopLoss=100; datetime Today=0; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int start() {if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят //…проверим открытие новой свечи if(Time[0]==Today) return(0); Today=Time[0]; //…получим значение массивов double ExtMapBuffer1[]; double ExtMapBuffer2[]; { int counted_bars = IndicatorCounted(); //---- int limit; //---- последний посчитанный бар будет пересчитан if(counted_bars > 0) counted_bars--; limit = Bars - counted_bars; //---- основной цикл for(int i = 2; i < limit; i++) { ExtMapBuffer1[i] = iFractals(NULL, 0, MODE_UPPER, i); ExtMapBuffer2[i] = iFractals(NULL, 0, MODE_LOWER, i); } //---- return(0); } // В переменную IZZ записываем значение индикатора Зиг заг на предыдущей свечке. //…подсчитаем количество ордеров и перенесем стоплосс int oBuy=0,oSell=0; for(int Or=OrdersTotal()-1;i>=0;i--)// Цикл в котором перебираем все открытые сделки. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Выбираем сделку с которой собираемся работать {if(OrderType()==OP_BUY)// Если эта сделка Бай, для неё следующие две строчки кода. {double f1=NormalizeDouble(iFractals(NULL,0,MODE_LOWER,3),Digits); /*в переменную f1 записываем значение нижнего фрактала. И это значение округляем до определенного числа после запятой. (цисло знаков после запятой в константе Digits)*/ if(f1>0 && OrderStopLoss()<f1 && f1<Bid) EditOrder(OrderTicket(),f1);}/*Если переменная f1 < больше нуля и Стоп Лос выбранного ордера меньше f1 и f1 меньше цены бид, тогда наверное выставляем стоп лос на уровень ф1*/ if(OrderType()==OP_SELL)// аналогично для сделки Селл {double f2=NormalizeDouble(iFractals(NULL,0,MODE_UPPER,3),Digits); if(f2>0 && OrderStopLoss()>f2 && f2>Ask) EditOrder(OrderTicket(),f2);} /*Здесь и строчкой ниже идет подсчет, мколько открыто сделок на Бай, сколько на Селл. И количество записывается в переменные oBuy и oSell*/ if(OrderType()==OP_BUY) oBuy++; if(OrderType()==OP_SELL) oSell++;} //…откроем ордер по показанию fractals при отсутствии открытых if(oBuy+oSell==0) { while(iFractals(NULL,0,MODE_UPPER,i)==0&&iFractals(NULL,0,MODE_UPPER,i)==0) i++; double upF=iFractals(NULL,0,MODE_UPPER,i); double dnF=iFractals(NULL,0,MODE_LOWER,i); double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} double tp=0; double sl=0; if(ExtMapBuffer1[0]>ExtMapBuffer1[1]) {sl=NormalizeDouble(upF+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(Bid-(sl-Bid)*TakeProfit,Digits); NewOrder(OP_BUY,Lot,0,tp,sl);} if(ExtMapBuffer2[0]<ExtMapBuffer2[1]) {sl=NormalizeDouble(dnF+StopLoss*Point,Digits); if(TakeProfit>0) tp=NormalizeDouble(Bid-(sl-Bid)*TakeProfit,Digits); NewOrder(OP_BUY,Lot,0,tp,sl);}} return(0);} //+------------------------------------------------------------------+код что-то не так
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Друзья индикатор iFractals исполльзует массивы, как можно сделать сравнение в массивах UP и DN можно ли это сделать?