
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет всем, у меня есть эта конкретная ошибка с моим советником на Stocastic.
Мои критерии таковы:
Когда мой stocEquator пересекает вверх (Uptrend), только длинные сделки будут срабатывать, когда мой stocTrigger пересекает вверх, а когда stocEquator пересекает вниз (Downtrend), только короткие сделки будут срабатывать, когда stocTrigger пересекает вниз.
Однако, когда я запускаю советник для тестирования, сделки не срабатывают, и мне стало интересно, в чем здесь может быть проблема, и я буду признателен, если кто-нибудь сможет мне помочь.
Заранее благодарю за помощь.
С уважением,
Терранс
int isCrossedTrigger = 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Купить
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Продать
}
{ return(0);
}
return(0);
Привет всем, у меня есть эта конкретная ошибка с моим советником на Stocastic.
Мои критерии таковы:
Когда мой stocEquator пересекает вверх (Uptrend), только длинные сделки будут срабатывать, когда мой stocTrigger пересекает вверх, а когда stocEquator пересекает вниз (Downtrend), только короткие сделки будут срабатывать, когда stocTrigger пересекает вниз.
Однако, когда я запускаю советник для тестирования, сделки не срабатывают, и мне стало интересно, в чем здесь может быть проблема, и я буду признателен, если кто-нибудь сможет мне помочь.
Заранее благодарю за помощь.
С уважением,
Терранс
int isCrossedTrigger = 0;
double shortStoc1Trigger= iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Trigger= shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger= shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Купить
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Продать
}
{ return(0);
}
return(0);Терранс
Единственное, что я не смог проверить, это переменную "total".
Код должен работать, если переменная total установлена правильно. Вот тестовый индикатор, который я использовал с вашими условиями, и он подает правильные сигналы на покупку и продажу (запустите индикатор в визуальном режиме, и вы увидите, когда он подает сигнал), так что ошибка где-то в другом месте.
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}Привет, mladen, спасибо за внимание. Я вернулся и посмотрел на свои коды и не смог понять, что вы имели в виду под переменной "total". В чем может быть причина моей ошибки?
С уважением,
Терранс
//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| TK|
//| Торговая платформа MetaTrader 4 / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "TK"
#property link "http://www.metaquotes.net"
//--- входные параметры
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
дата-время newbar;
int start()
{
if(newbar==Time[0])return(0);
else newbar=Time[0];
int ticket, total;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта | Стохастический триггер
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //оригинальное движение стока
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //однородное движение Stoc
//+--------------------------------------------------------------------------------------+
//| функция запуска эксперта | Установить триггерную сделку только при пересечении линии и закрытии свечи |//.
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2;
if ((diff1*diff2)<0)
{
if (shortStoc1>longStoc1)
isCrossed = 1;
else isCrossed = 2;
}
// Начало экватора -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
// Equator Stoc End -------------------------------------
//+------------------------------------------------------------------------------------+
//| функция завершения работы эксперта | Установка триггерной сделки только при пересечении линии и закрытии свечи |//.
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert end function | Stochastic Trigger
//+------------------------------------------------------------------+
//| expert start function | Триггерный ордер
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //ограничение количества открытых сделок
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
//| экспертная функция завершения |
//+------------------------------------------------------------------+
Терранс
Единственное, что я не смог проверить, это переменную "total".
Код должен работать, если переменная total установлена правильно. Вот тестовый индикатор, который я использовал с вашими условиями, и он подает правильные сигналы на покупку и продажу (запустите индикатор в визуальном режиме и вы увидите, когда он подает сигнал), так что ошибка где-то в другом месте.
#property indicator_buffers 0
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int init()
{
return(0);
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
int start()
{
int total = 0;
int isCrossedTrigger= 0;
double shortStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1) ;
double shortStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Trigger = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2) ;
double diff1Trigger = shortStoc1Trigger-longStoc1Trigger;
double diff2Trigger = shortStoc2Trigger-longStoc2Trigger;
if ((diff1Trigger*diff2Trigger)<0)
{
if (shortStoc1Trigger>longStoc1Trigger)
isCrossedTrigger= 1;
else isCrossedTrigger= 2;
}
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN, 2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
//
//
//
//
//
if(total < 2)
{
if(isCrossedTrigger== 1 && isCrossedEquator == 1)
{
Alert("Buy at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
if(isCrossedTrigger== 2 && isCrossedEquator == 2)
{
Alert("Sell at : "+TimeToStr(Time[0],TIME_DATE|TIME_SECONDS));
}
}
return(0);
}Привет, mladen, спасибо за внимание. Я вернулся и посмотрел на свои коды и не смог понять, что вы имели в виду под переменной "total". В чем может быть причина моей ошибки?
С уважением,
Терранс
//+------------------------------------------------------------------+
//| My_First_EA.mq4 |
//| TK|
//| Торговая платформа MetaTrader 4 / MetaQuotes Software Corp. |
//+------------------------------------------------------------------+
#property copyright "TK"
#property link "http://www.metaquotes.net"
//--- входные параметры
extern double TakeProfit=500.0;
extern double Lots=0.1;
extern double StopLoss=500.0;
//+------------------------------------------------------------------+
//| функция инициализации эксперта |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция деинициализации эксперта | |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта |
//+------------------------------------------------------------------+
дата-время newbar;
int start()
{
if(newbar==Time[0])return(0);
else newbar=Time[0];
int ticket, total;
if(Bars<100)
{
Print("баров меньше 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit меньше 10");
return(0);
}
//+------------------------------------------------------------------+
//| функция запуска эксперта | Стохастический триггер
//+------------------------------------------------------------------+
// shortStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_MAIN,0); //оригинальное движение стока
// longStoc = iStochastic(NULL,0,7,15,17,MODE_LWMA,0,MODE_SIGNAL,0); //однородное движение Stoc
//+--------------------------------------------------------------------------------------+
//| функция запуска эксперта | Установить триггерную сделку только при пересечении линии и закрытии свечи |//.
//+--------------------------------------------------------------------------------------+
int isCrossed = 0;
double shortStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,1);
double longStoc1 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_MAIN,2);
double longStoc2 = iStochastic(NULL,0,3,5,7,MODE_SMA,0,MODE_SIGNAL,2);
double diff1 = shortStoc1-longStoc1;
double diff2 = shortStoc2-longStoc2;
if ((diff1*diff2)<0)
{
if (shortStoc1>longStoc1)
isCrossed = 1;
else isCrossed = 2;
}
// Начало экватора -------------------------------------
int isCrossedEquator = 0;
double shortStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,1);
double longStoc1Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,1);
double shortStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_MAIN,2);
double longStoc2Equator = iStochastic(NULL,0,10,100,20,MODE_SMA,0,MODE_SIGNAL,2);
double diff1Equator = shortStoc1Equator-longStoc1Equator;
double diff2Equator = shortStoc2Equator-longStoc2Equator;
if ((diff1Equator*diff2Equator)<0)
{
if (shortStoc1Equator>longStoc1Equator)
isCrossedEquator = 1;
else isCrossedEquator = 2;
}
// Equator Stoc End -------------------------------------
//+------------------------------------------------------------------------------------+
//| функция завершения работы эксперта | Установка триггерной сделки только при пересечении линии и закрытии свечи |//.
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| expert end function | Stochastic Trigger
//+------------------------------------------------------------------+
//| expert start function | Триггерный ордер
//+------------------------------------------------------------------------------------------------------------+
total = OrdersTotal();
if(total < 2) //ограничение количества открытых сделок
{
if(isCrossed == 1 && isCrossedEquator == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"My EA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер BUY : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера BUY : ",GetLastError());
return(0);
}
if(isCrossed == 2 && isCrossedEquator == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Мой советник",12345,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Открыт ордер SELL : ",OrderOpenPrice());
}
else Print("Ошибка при открытии ордера SELL : ",GetLastError());
return(0);
}
return(0);
}
return(0);
}
//+------------------------------------------------------------------+
//| функция завершения работы эксперта |
//+------------------------------------------------------------------+Терранс
В моих тестах этот советник работает.
Вот результат тестирования и отчет о результатах обратного тестирования. Тестирование проводилось на 1-минутном таймфрейме
Привет всем, pls может кто-нибудь помочь мне с этим кодом ниже,,,,it продолжает давать мне звуковое оповещение на каждом тике, а не только когда срабатывают необходимые условия торговли! Я не хочу, чтобы оповещение звучало на каждом тике или когда формируется новая свеча.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
//---- входные параметры
extern int ADXbars=14;
extern int CountBars=350;
//---- буферы
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//| Пользовательская функция деинициализации индикатора |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция итерации индикатора |
//+------------------------------------------------------------------+
int init()
{
//-- Короткое имя индикатора
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- строка индикатора
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars);
int i,shift,counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- начальный ноль
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());
i++;
}
if (b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*Point;
// Alert("Стрелка на продажу","\n", "Текущее время ",TimeToStr(CurTime()),"\n",Symbol());
i++;
}
}
return(0);
}
//+---------------------------------------------------------------+
Привет всем, pls может кто-нибудь просто помочь мне с этим кодом ниже,,,,it продолжает давать мне звуковое оповещение на каждом тике вместо того, чтобы только когда торговые необходимые условия срабатывают! Я не хочу, чтобы оповещение звучало на каждом тике или когда формируется новая свеча.
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Red
//---- входные параметры
extern int ADXbars=14;
extern int CountBars=350;
//---- буферы
double val1[];
double val2[];
double b4plusdi,nowplusdi,b4minusdi,nowminusdi;
//+------------------------------------------------------------------+
//| Пользовательская функция деинициализации индикатора |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Пользовательская функция итерации индикатора |
//+------------------------------------------------------------------+
int init()
{
//-- Короткое имя индикатора
IndicatorShortName("PipsdatorPro1("+Symbol()+")");
//---- строка индикатора
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,233);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,234);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars);
SetIndexDrawBegin(1,Bars-CountBars);
int i,shift,counted_bars=IndicatorCounted();
//---- проверка на возможные ошибки
if(counted_bars<0) return(-1);
//---- начальный ноль
if(counted_bars<1)
{
for(i=1;i<=CountBars;i++) val1[CountBars-i]=0.0;
for(i=1;i<=CountBars;i++) val2[CountBars-i]=0.0;
}
for (shift = CountBars; shift>=0; shift--)
{
b4plusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift-1);
nowplusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_PLUSDI,shift);
b4minusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift-1);
nowminusdi=iADX(NULL,0,ADXbars,PRICE_CLOSE,MODE_MINUSDI,shift);
if (b4plusdi>b4minusdi && nowplusdi<nowminusdi && i!=1)
{
val1[shift]=Low[shift]-5*Point;
// Alert("Buy Arrow","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());
i++;
}
if (b4plusdinowminusdi && i!=1)
{
val2[shift]=High[shift]+5*Point;
// Alert("Стрелка на продажу","\n", "Текущее время ",TimeToStr(CurTime()),"\n",Symbol());
i++;
}
}
return(0);
}
//+---------------------------------------------------------------+Mastercash, есть версия этого индикатора здесь https://www.mql5.com/en/forum/173574/page320 может это поможет.
Терранс
В моих тестах этот советник работает
Вот результат тестирования плюс отчет об обратном тестировании. Тестирование проводилось на 1-минутном таймфреймеПривет, mladen, я пересмотрел код в соответствии с вашими комментариями и заметил, что сделка срабатывает только тогда, когда обе мои стохастические линии срабатывают вверх или вниз на одной и той же свече.
Однако, я пытаюсь добиться того, чтобы если индикатор экватора пересекается вверх, указывая на восходящий тренд, советник срабатывал только в длинную позицию, когда быстрый индикатор срабатывает вверх, и наоборот, вместо того, чтобы экватор и быстрый индикатор срабатывали в одном направлении на одной и той же свече.
Я пытался настроить советник под эти критерии, но не смог добиться желаемых результатов. Может быть, я что-то делаю не так? Пожалуйста, помогите. Еще раз спасибо.
С уважением,
Терранс
Привет, mladen, я пересмотрел код в соответствии с вашими комментариями и заметил, что сделка срабатывает только тогда, когда обе мои стохастические линии срабатывают вверх или вниз на одной и той же свече.
Однако я пытаюсь добиться того, чтобы, если индикатор экватора пересекается вверх, указывая на восходящий тренд, советник срабатывал только в длинную сторону, когда быстрый индикатор срабатывает вверх, и наоборот, вместо того чтобы и экватор, и быстрый индикатор срабатывали в одном направлении на одной и той же свече.
Я пытался настроить советник под эти критерии, но не смог добиться желаемых результатов. Может быть, я что-то делаю не так? Пожалуйста, помогите. Еще раз спасибо.
С уважением,
ТеррансТерранс
Вероятно, для этого вам придется написать собственный индикатор (некоторые вещи в советниках просто невозможно сделать так, как это делают индикаторы).
Terrance Для этого вам, вероятно, придется написать собственный индикатор (некоторые вещи в советниках вы просто не можете сделать так же, как это делают индикаторы).
Привет, mladen, 1 вещь, которую я не понимаю, это то, почему я могу сделать это с MA, а не с iMA, несмотря на то, что это одинаковые критерии? Может это какие-то настройки индикатора?
С уважением,
Терранс
Привет, mladen, 1 вещь, которую я не понимаю, это то, почему я могу сделать это с MA, а не с iMA, несмотря на то, что это один и тот же тип критериев? Может это какие-то настройки индикатора?
С уважением,
Терранспотому что с пользовательским индикатором вы можете сохранять состояния (тренды) между двумя тиками, а при использовании iMA вы не можете (только один пример).