Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Vyalko

Пользователи
  • Постов

    5
  • Зарегистрирован

  • Посещение

Весь контент Vyalko

  1. Спасибо Liv. Учту. Возможно подскажете ссылку, где я смогу посмотреть код советника который использует двухцветный индикатор- гистограму. Спасибо за то, что находите для нас время.
  2. Привет всем. Помогите реализовать идею. Есть простенький советник на пересечении двух мувингов. Хочу фильтровать индикатором по следующему принципу: 1вариант//мувинги подали сигнал на покупку. Индикатор в этот момент находится ниже нуля, но его цвет зеленый. Результат= разрешить покупку 2 вариант// мувинги подали сигнал на покупку. Индикатор в этот момент находится выше нуля, но его цвет красный. Результат= не разрешать покупку. 3вариант//Самый обычный: мувинги- на покупку и индикатор выше нуля. Результат= разрешить покупку. Закрытие ордеров хорошо бы реализовать через такую же логику. Но если не получится, то любой вариант. Индикатор может быть любая двухцветная гистограмма. Я выбрал этот. Он не сильно опаздывает, а вот насчет перерисовки - не знаю. Если у вас есть лучший индикатор- используйте его. У меня не получился советник. Слабоват я еще в них ______________________________.rar
  3. У меня не получается прикрепить файл, поэтому выложу код. Открытие и закрытие позиций на покупку происходит правильно. А вот на продажу- или не открывает, или отроет и тут же закроет раз сто. Что только не менял не получалось зделать нормально. Я думаю, что слишком просто я его вставил, а по другому не умею. Принцип пересечения трех мувингов с фильтрацией каким то индикатором мне понравился, поэтому и хочу довести до ума. Ссылка на индюк http://www.fxexpert.ru/forum/index.php?sho...c=465&st=20 #property copyright "Виктор Чеботарёв" #property link "http://www.chebotariov.co.ua/" #define MAGIC 29062006 extern int ShortEma = 8; // Период короткой MA extern int LongEma = 75; // Период длинной MA extern int KvikEma = 5; // Период быстрой MA extern int ShiftEma = 3; extern int Fisher_yur4ik = 150; extern int RiskMax=10; extern double LotsMax=90.0; extern int DecreaseFactor=6; extern int TakeProfit=110; extern int StopLoss=80; extern int TrailingStop=70; //+------------------------------------------------------------------+ //| Расчет оптимального размера лота | //+------------------------------------------------------------------+ double LotsOptimized() { //---- double Lots=NormalizeDouble(AccountBalance()*RiskMax/(100000.0*Ask),1); if(AccountFreeMargin()<(1000*Ask*Lots)) { Lots=NormalizeDouble(AccountFreeMargin()*RiskMax/(100000.0*Ask),1); } if(Lots>LotsMax) { Lots=LotsMax; Print("Превышен максимальный размер лота. Размер лота изменен на ",LotsMax); } int orders=HistoryTotal(); int losses=0; if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Ошибка в истории!"); break; } if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC || OrderType()>OP_SELL)continue; if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) { Lots=NormalizeDouble(Lots/(DecreaseFactor*losses),1); } } if(Lots<MarketInfo(Symbol(),MODE_MINLOT)) { Lots=MarketInfo(Symbol(),MODE_MINLOT); } double raznica = MathMod(Lots,MarketInfo(Symbol(),MODE_LOTSTEP)); if(raznica>0.0) { Lots -= raznica; } //---- return(Lots); } //+------------------------------------------------------------------+ bool symbolOrders() { //---- int orders = OrdersTotal(); for(int i=orders-1; i>=0; i--) { if(!OrderSelect(i, SELECT_BY_POS )) { Print("OrderSelect( ", i, ", SELECT_BY_POS ) - Error #", GetLastError()); continue; } if(OrderSymbol()==Symbol()) { if(OrderMagicNumber()==MAGIC) { return(true); } } } //---- return(false); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- int cnt, ticket; int total=OrdersTotal(); if(Bars<100) { Print("Количество баров меньше 100"); return(0); } if(TakeProfit<10 && TakeProfit>0) { TakeProfit=10; Print("Размер TakeProfit был меньше 10, поэтому изменен на 10"); } double Fisher= iCustom(NULL, 0, "FX_FISH",25,0,1,1); double SEma0 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0); double SEma1 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); double LEma0 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0); double LEma1 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); double KEma0 = iMA(NULL,0,KvikEma,0,MODE_EMA,PRICE_CLOSE,0); double KEma1 = iMA(NULL,0,KvikEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); if(!symbolOrders()) { if(AccountFreeMargin()<(1000*LotsOptimized())) { Print("У Вас недостаточно денег. Свободной маржи = ", AccountFreeMargin()); return(0); } if(Fisher>0.3 && KEma0>LEma0 && KEma0>SEma0) { if(!IsTradeAllowed()) { Print("AD BUY: Торговый поток занят."); return(0); } ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"EMA BUY",MAGIC,0,CLR_NONE); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Открыта позиция на покупку по сигналу EMA BUY: ",OrderOpenPrice()); } else { Print("Ошибка открытия позиции на покупку по сигналу EMA BUY: ",GetLastError()); return(0); } } } if(Fisher<-0.3 && KEma0<LEma0 && KEma0<SEma0) { if(!IsTradeAllowed()) { Print("EMA SELL: Торговый поток занят."); return(0); } ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"EMA SELL",MAGIC,0,CLR_NONE); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("Открыта позиция на продажу по сигналу EMA SELL: ",OrderOpenPrice()); } else { Print("Ошибка открытия позиции на продажу по сигналу EMA SELL: ",GetLastError()); return(0); } } } } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if(OrderType()==OP_BUY) { if(Fisher < 0.15) { if(!IsTradeAllowed()) { Print("Order сlose: Торговый поток занят."); return(0); } OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE); return(0); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { if(!IsTradeAllowed()) { Print("Trailing stop: Торговый поток занят."); return(0); } OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE); return(0); } } } } else { if(Fisher > -0.15) { if(!IsTradeAllowed()) { Print("Order сlose: Торговый поток занят."); return(0); } OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE); return(0); } if(TrailingStop>0) { if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) { if(!IsTradeAllowed()) { Print("Trailing stop: Торговый поток занят."); return(0); } OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,CLR_NONE); return(0); } } } } } } //---- return(0); }
  4. Здравствуйте. Есть обычный советник на пересечении двух мувингов. Я добавил еще один, и хочу дополнить его фильтром на основе индикатора FX Fish. Я прописал индикатор, но по моему не правильно. Во всяком случае работает он не корректно. Посмотрите пожалуйста. double Fisher= iCustom(NULL, 0, "FX_FISH",25,0,0,0); double SEma0 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,0); double SEma1 = iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); double LEma0 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,0); double LEma1 = iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); double KEma0 = iMA(NULL,0,KvikEma,0,MODE_EMA,PRICE_CLOSE,0); double KEma1 = iMA(NULL,0,KvikEma,0,MODE_EMA,PRICE_CLOSE,ShiftEma); Файлы прикрепляю. Че то не получилось прикрепить.
  5. Всем привет. Liv подскажи пожалуйста. Нет уже сил. Есть советник. В нем не првильно реализовано закрытие ордеров по достижению условия MA1>MA2. Что неправильно и как переделать. Вот код. //+------------------------------------------------------------------+ //| Sidus_EA_VII.mq4 | //| Copyright © 2006, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" #define MAGIC 1828212 extern double TakeProfit = 70; extern double StopLoss = 35; extern double TrailingStop = 10; extern double Lots = 0.1; extern double MaximumRisk = 0.05; extern double DecreaseFactor = 2; extern int Slippage = 0; extern string Name_Expert = "Sidus_EA_VII"; double spread = 1.5; void deinit() { Comment(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start(){ if(Bars<100){ Print("bars less than 100"); return(0); } if(StopLoss<8){ Print("StopLoss less than 10"); return(0); } int cnt, ticket, total; double RSI=iRSI(NULL,0,21,PRICE_CLOSE,0); double Price = iOpen(Symbol(), NULL, 0); double Trigger=iMA(NULL,0,3,0,MODE_EMA,PRICE_CLOSE,0); double MA1=iMA(NULL,0,6,0,MODE_EMA,PRICE_CLOSE,0); double MA2=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,0); if(AccountFreeMargin()<(1*Lots)){ Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (!ExistPositions()){ if ((Price>Trigger) && (MA1>MA2) && (RSI<60)){ ticket = OrderSend(Symbol(),OP_BUY, LotsOptimized() ,Ask, 3, Ask - StopLoss*Point, Ask + TakeProfit*Point, "Sidus_EA_VII", 1828212, 0, Green); return(0); if(OrderType()==OP_BUY) { if(MA1<MA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,Lime); } return(0); } if ((Price<Trigger) && (MA1<MA2) && (RSI>40)){ ticket = OrderSend(Symbol(), OP_SELL,LotsOptimized(),Bid, 3, Bid + StopLoss*Point, Bid - TakeProfit*Point, "Sidus_EA_VII", 1828212, 0, Red); return(0); if(OrderType()==OP_SELL) { if(MA1>MA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,Lime); } } } TrailingPositionsBuy(TrailingStop); TrailingPositionsSell(TrailingStop); return (0); } bool ExistPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { return(True); } } } return(false); } void TrailingPositionsBuy(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_BUY) { if (Bid-OrderOpenPrice()>trailingStop*Point) { if (OrderStopLoss()<Bid-trailingStop*Point) ModifyStopLoss(Bid-trailingStop*Point); } } } } } } void TrailingPositionsSell(int trailingStop) { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) { if (OrderType()==OP_SELL) { if (OrderOpenPrice()-Ask>trailingStop*Point) { if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0) ModifyStopLoss(Ask+trailingStop*Point); } } } } } } void ModifyStopLoss(double ldStopLoss) { bool fm; fm = OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); } return(0); double LotsOptimized() { double lot = Lots; int orders = HistoryTotal(); // history orders total int losses = 0; // number of losses orders without a break //---- select lot size lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk / 500, 1); //---- calcuulate number of losses orders without a break if(DecreaseFactor > 0) { for(int i = orders - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false) { Print("Error in history!"); break; } //---- if(OrderSymbol() != Symbol() || OrderType() > OP_SELL) continue; //---- if(OrderProfit() > 0) break; //---- if(OrderProfit() < 0) losses++; } if(losses > 1) lot = NormalizeDouble(lot - lot*losses / DecreaseFactor,1); } //---- return lot size if(lot < 0.1) lot = 0.1; return(lot); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+
×
×
  • Создать...