Ребята вот эксперт и 2 индюка, подскажите почему эксперт не работает с ними (конкретно в закрытие длинных позиций)
if(OrderType()==OP_BUY) { // long position is opened if(DigFil1>DigFil { OrderClose(OrderTicket... ... ...
4678457a, а где индюки то? Ты бы выложил график с этими индюками.
Может это условие (DigFil1>DigFil)// никогда не выполняется?
Добрый день rid. Коды индикаторов лежат чуть выше твоего ответа см. прикреплённые файлы: 2adaamf.rar
А если хочешь видеть эти индикаторы при тестировании вот пожалуйста :
for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { if(DigFil1>DigFil)// { OrderClose(OrderTicket ... ...
Я почти не разбираюсь в схемотехнике индикаторов, поэтому и попросил выложить график!
Но условие закрытия позиции в эксперте if(DigFil1>DigFil //...
на мой взгляд задано некоректно!
Видимо нужно задать закрытие иначе: Задать именно пересечение линий индикаторов, а не постоянное зависание одной линии над другой.
Кроме того, вот этот кусочек кода выше - в блоке закрытия мне вообще не понятен! Может быть он и работает, но выражение
if(OrderType()<=OP_SELL &&
мне не ясно!
Почему бы не "оформить" этот блок - "по человечески" ? Чтобы не выворачивать мозги наизнанку! Вот так, как я делал когда -то -
for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { if(DigFil1>DigFil)// { OrderClose(OrderTicket ... ...
Я почти не разбираюсь в схемотехнике индикаторов, поэтому и попросил выложить график!
Но условие закрытия позиции в эксперте if(DigFil1>DigFil //...
на мой взгляд задано некоректно!
Видимо нужно задать закрытие иначе: Задать именно пересечение линий индикаторов, а не постоянное зависание одной линии над другой.
Кроме того, вот этот кусочек кода выше - в блоке закрытия мне вообще не понятен! Может быть он и работает, но выражение
if(OrderType()<=OP_SELL &&
мне не ясно!
Почему бы не "оформить" этот блок - "по человечески" ? Чтобы не выворачивать мозги наизнанку! Вот так, как я делал когда -то -
Роман, я пробовал вставлять другое условие на закрытие длинной позиции и всё работает например ( Stoc>80) в код эксперта, значит причина именно в условии (DigFil1>DigFil) , либо в обозначении индикаторов как переменных DigFil1=iCustom(NULL,0,"DigitalFilterOpen",0,0);, да кстати если индикаторы рисуются в тестере значит они работают.
DigFil=iCustom( NULL, 0, "DigitalFilterMA", 0, 0); DigFil1=iCustom( NULL, 0, "DigitalFilterOpen", 0, 0); // после этих строчек вставить : //------------------------------------------------------- double Delta = (DigFil1-DigFil) ; Comment(Delta );
А ты смотрел, что там в тестере журнал печатает? Есть ли ошибки?
Можно попробовать вывести в комментарий условие закрытия (см. выше) и отследить. Выполняется оно или нет. Запустить визуальный режим. Т.е. в визуальном режиме в тестере вывести на график индикаторы с параметрами советника. И при пересечении линий индикаторов смотреть в левом верхнем углу графика, - меняется ли знак Дельты.
Ну вот. Решил я проверить этот эксперт и вместо сделок получаю одни ошибки в журнале.
DigitalFilterMA GBPUSD,H1: Library call is not allowed. Indicator cannot run.
Для запуска индикаторов :
"Внимание! Для работы требуется три дополнительных DLL
содержащих блок математической обработки - bdsp.dll, lapack.dll, mkl_support.dll,
которые должны быть установлены в C:\Windows\System32\ или рядом с DF.dll в \experts\libraries\"
А где эти DLL ? У тебя они вставлены, - все три?
В код добавить #import "DF.dll" и убрать параметры фильтра в глобальных переменных далее изменить код связанный с индикаторами на
DigFil=iCustom(NULL,0,"DigitalFilterOpen",0,23,16,38,0,0,0,0,0.08,0,0,0,0);
DigFil1=iCustom(NULL,0,"DigitalFilterMA",0,25,11,38,0,0,0,0,0.08,0,-1,0,0); где как ты видишь указаны эти глобальные переменные. И всё ОКей
Ну вот. Решил я проверить этот эксперт и вместо сделок получаю одни ошибки в журнале.
DigitalFilterMA GBPUSD,H1: Library call is not allowed. Indicator cannot run.
Для запуска индикаторов :
"Внимание! Для работы требуется три дополнительных DLL
содержащих блок математической обработки - bdsp.dll, lapack.dll, mkl_support.dll,
которые должны быть установлены в C:\Windows\System32\ или рядом с DF.dll в \experts\libraries\"
А где эти DLL ? У тебя они вставлены, - все три?
Да эти файлы можно найти в инете и вставить как написано в папки
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
//+------------------------------------------------------------------+ //| ADX_System.mq4 | //| System | //| work_a@ukr.net | //+------------------------------------------------------------------+ #property copyright "System" #property link "work_a@ukr.net" #include <stdlib.mqh> extern double Lots =50; extern double StopLoss = 145; extern double StopLossShort = 240; extern double TrailingStop = 55; extern double TrailingStopShort= 65; extern double TrailingTakeProfit = 345; extern double TrailingStopLoss = 85; extern double TrailingTakeProfitShort= 275; extern double TrailingStopLossShort = 85; extern double MovingShift = 0; extern double St_mini=11.6; // Миним. уровень стохастик extern double St_maxi=24.35; extern double St_max=84.05; extern double St_maxmi=51.05; extern double St_minishort=71.55; extern double St_maxishort = 87.55; extern double St_sred = 50.55; extern int Kperiod=9; extern int Dperiod=3; extern int slowing=5; extern int FType=0; extern int P1=25; extern int D1=16; extern int A1=38; extern int P2=0; extern int D2=0; extern int A2=0; extern int Delay=0; extern double Ripple=0.08; int FilterSize=0; extern int BarShift= -1; int start()
{ double maC10, maC11, maC12, maC13, maC111, maC112, maC15, maC16 ; double maC11Short, maC12Short, maC13Short, maC14Short, Stoc, StocSignal, Stoc1, StocSignal1; double DigFil, DigFil1, DigFil2, DigFil3, DigFilMA0, DigFilOpen0 ; int cnt, ticket,ticket1,total; DigFil=iCustom( NULL, 0, "DigitalFilterMA", 0, 0); DigFil1=iCustom( NULL, 0, "DigitalFilterOpen", 0, 0); //////////////////////////////// if(Bars<100) { Print("bars less than 100"); return(0); } if (TrailingTakeProfit<10) { Print("TrailingTakeProfit less than 10"); return(0); // check TakeProfit } //////////////////////////////////////////////
// long position (BUY) if(Volume[0]>1) return; //maC10=iMA(NULL,0,20,MovingShift,MODE_EMA,PRICE_MEDIAN,0); Stoc=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_MAIN,0); Stoc1=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_MAIN,1); StocSignal=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_SIGNAL,0); StocSignal1=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_SIGNAL,1); total = OrdersTotal(); if(total<1) { if(AccountFreeMargin()<(20000)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if(StocSignal < Stoc && StocSignal < St_maxi && StocSignal > StocSignal1 && StocSignal > St_mini) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Bid-StopLoss*Point,0,"adx sample",0,0,Blue); /// if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } else Print("Error opening BUY order : ",GetLastError()); return(0); } if(StocSignal<Stoc && StocSignal<StocSignal1 && StocSignal>St_minishort && StocSignal<St_maxishort) //StocSignal < StocSignal1 && maC15 < maC16 && Stoc > St_maxmi { ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Ask+StopLossShort*Point,0,"macd sample",0,0,Red);///Ask+21.50,Bid-11.5 if(ticket1>0) { if(OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); } else Print("Error opening SELL order : ",GetLastError()); return(0); } return(0); } if(Volume[0]>1) return; for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // check for opened position OrderSymbol()==Symbol()) // check for symbol { if(OrderType()==OP_BUY) // long position is opened { if(DigFil1>DigFil)//Stoc>75 StocSignal > St_max && Stoc>StocSignal DigFilOpen0 < Low[1] && Close[1]>Close[2] DigFil < DigFil1 DigFil < DigFil1 && DigFil1 > DigFil2 && DigFil2 > DigFil3 { OrderClose(OrderTicket(),Lots,Bid,3,Green); // close position return(0); // exit } } else // go to short position { if(StocSignal < St_maxi)// maC11Short > maC12Short && maC12Short < maC13Short Low[0]>DigFilOpen0 { OrderClose(OrderTicket(),Lots,Ask,3,White); // close position return(0); // exit } } } } return(0); }