А зачем вставлять этот индюк в советник ? Можно же сделать оч. просто.
Сначала надо написать iCustom для этого индюка.
double VAR = iCustom ( ..... ....
А потом уже совсем просто.
В функцию СТАРТ вставить это условие
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ void start() { double VAR = iCustom ( ..... .... ); //---- check for history and trading //(если на графике есть более 100 баров и торговый поток свободен) if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol //если расчитанный размер лота соответствует текущему размеру депозита if(CalculateCurrentOrders(Symbol())==0){ if(VAR<0.5)//если индикатор меньше 0.5 CheckForOpen();}// начинием работу else CheckForClose();//в противном случае, - закрываем позиции } //жжжжжжжжжж Конец функции void start()жжжжжжжжжж+
А зачем вставлять этот индюк в советник ? Можно же сделать оч. просто.
Сначала надо написать iCustom для этого индюка.
double VAR = iCustom ( ..... ....
А потом уже совсем просто.
В функцию СТАРТ вставить это условие
Спасибо большое за помощь...но тут опять проблема, советник их не дает закрывать если так встроить индикатор, а мне надо чтобы советник только открывал сделки с индиктором, а после закрывал уже без индикатора...пробовал сам справиться не получилось, в чем ошибка не пойму, вот что у меня получилось
//жжжжжжжжжжжж Функция открытия позиций жжжжжжжжжжжжжжжжжжжжжжжжжжжжж+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen() {
double ma;
double VAR;
double z= 0.5;
int res;
//---- go trading only for first tiks of new bar
if(Volume[0]>1) return;
//---- get Moving Average
ma= iMA(NULL,0,MovingPeriod_Open,MovingShift,MODE_SMA,PRICE_CLOSE,0);
VAR= iCustom (NULL,0,"iVAR",n,nBars,1,0);
//---- sell conditions
if((Open[1]>ma) && (Close[1]<ma) && (VAR<z ))
{
SL=0;TP=0;
if(StopLoss>0) SL=Bid+Point*StopLoss;
if(TakeProfit>0) TP=Bid-Point*TakeProfit;
res=WHCOrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,SL,TP,
"Moving Average",MAGICMA,0,Red);
if(res < 0){Print("Ошибка открытия ордера SELL #", GetLastError());
Sleep(10000); return (0); }
}
Странно! Я предполагаю, что при таком условии
if(CalculateCurrentOrders(Symbol())==0){//если нет открытых поз if(VAR<0.5)//если индикатор меньше 0.5 CheckForOpen(); }// начинием работу else CheckForClose();//в противном случае(если есть откр. поза , // - проверяем условия на закрытие позиции
Как раз и получается, что индюк VAR задает условия(ограничение) только для открытия позиций!
Но никак не влияет на функцию закрытия.
Если я не прав, - то присутствующие меня поправят.
Странно! Я предполагаю, что при таком условии
Как раз и получается, что индюк VAR задает условия(ограничение) только для открытия позиций!
Но никак не влияет на функцию закрытия.
Если я не прав, - то присутствующие меня поправят.
Не хочет работать советник, хотя все сделал как Вы сказали...и пробовал уже сделать как я выше писал...не видит 0,5, открывает только по советнику, не пойму, что ему еще надо (((
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте! Очень прошу помочь в одном вопросе...так я только начинаю программировать, то конечно не все получается, поэтому обращаюсь к "старшим братьям" по разуму...помогите в советник Moving Average_Modify вставить индикатор iVAR, чтобы советник открывал сделки, когда значение индиктора менее 0,5....я уже неделю бьюсь, не могу сделать!!! Заранее всем огромное спасибо, кто поможет!!!
Советник прикрепляю, а вот код индикатора
// Индикатор отображает индекс вариации ценового ряда, вычисленного
// на минимальном предшествующем интервале длины 2^n. Индекс вариации
// показывает, что преобладает во временном ряду – трендовая или флетовая
// составляющая, или же ряд ведет себя случайно.
// М.М. Дубовиков и др. - Размерность минимального покрытия и локальный
// анализ фрактальных временных рядов.
#property copyright "(C)opyright © 2008, Ilnur"
#property link "http://www.metaquotes.net"
//---- настройки индикатора
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_level1 0.5
//---- входные параметры
extern int n = 5;
extern int nBars = 1000;
//---- буфер индикатора
double ibuffer[];
//+------------------------------------------------------------------+
//| Функция инициализации индикатора |
//+------------------------------------------------------------------+
int init()
{
//---- настройка параметров отрисовки
SetIndexBuffer(0,ibuffer);
SetIndexStyle(0,DRAW_LINE);
SetIndexDrawBegin(0,Bars-nBars);
SetIndexLabel(0,"iVAR");
//---- "короткое имя" отображаемое в окне индикатора
IndicatorShortName("iVAR("+n+")");
return(0);
}
//+------------------------------------------------------------------+
//| Основная функция индикатора |
//+------------------------------------------------------------------+
int start()
{
int i, j, k, nTotal, nCountedBars = IndicatorCounted();
int ihigh, ilow, nInterval;
double Delta, Xс, Yс, Sx, Sy, Sxx, Sxy;
//---- последний посчитанный бар будет пересчитан
if(nCountedBars==0) nTotal = nBars;
if(nCountedBars>0) nTotal = Bars-nCountedBars-1;
//---- основной цикл индикатора
for(j=nTotal; j>=0; j--)
{
Sx = 0; Sy = 0; Sxx = 0; Sxy = 0;
for(i=0; i<=n; i++)
{
nInterval = MathPow(2,n-i);
//---- суммируем разницы максимальной и минимальной цен на интервале
for(Delta=0, k=0; k<MathPow(2,i); k++)
{
ihigh = iHighest(Symbol(),0,MODE_HIGH,nInterval,nInterval*k+j);
ilow = iLowest(Symbol(),0,MODE_LOW,nInterval,nInterval*k+j);
Delta += High[ihigh]-Low[ilow];
}
//---- вычисляем координаты вариации в двойном логарифмическом масштабе
Xс = (n-i)*MathLog(2.0);
Yс = MathLog(Delta);
//---- накапливаем данные для нахождения коэффициентов линии регрессии с помощью МНК
Sx += Xс;
Sy += Yс;
Sxx += Xс*Xс;
Sxy += Xс*Yс;
}
//---- вычисляем индекс вариации (коэффициент наклона линии регрессии)
ibuffer[j] = -(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
}
return(0);
}