Вам необходимо разбираться в своем коде и в логах эксперта. Терминал
исполняет то, что хочет эксперт.
Renat:
Вам необходимо разбираться в своем коде и в логах эксперта. Терминал исполняет то, что хочет эксперт.
Код обычный, взято за основу то, что было в примерах и в чемпионате,
ни чего экстраординарного. Вам необходимо разбираться в своем коде и в логах эксперта. Терминал исполняет то, что хочет эксперт.
Почему он при тике не генерирует сигнал точно - это не понятно. Логи соответствуют тикам, то есть все молчком.
Нулевой бар не рассматривается, везде в индикаторах бар 1-й.
Вы можете выложить эталон, который будет адекватно работать как с несколькими экспертами,
так и гарантировать точность работы на каждом тике?
Вот пример правильного омеговского RSI.. :)
#property copyright "Copyright © Khrapovskiy Igor"Примерно такой код. Почему у вас другой RSI ?????
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
externintRSIPeriod=14;
//---- buffers
doubleMyRSIBuffer[];
//double PosBuffer[];
//double NegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
intinit()
{
stringshort_name;
//---- 2 additional buffers are used for counting.
IndicatorBuffers(1);
// SetIndexBuffer(1,PosBuffer);
// SetIndexBuffer(2,NegBuffer);
//---- indicator line
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MyRSIBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="MyRSI("+RSIPeriod+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
SetIndexDrawBegin(0,RSIPeriod);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Relative Strength Index |
//+------------------------------------------------------------------+
intstart()
{
inti,counted_bars=IndicatorCounted();
doublerel,negative,positive;
//----
if(Bars<=RSIPeriod)return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=RSIPeriod;i++)MyRSIBuffer[Bars-i]=0.0;
//----
for(i=0;i<Bars-RSIPeriod-1;i++)
{
doublesumn=0.0,sump=0.0;
for(intk=0;k<RSIPeriod;k++)
{
rel=Close[i+k]-Close[i+k+1];
if(rel>0)sump+=rel;
elsesumn+=(-1*rel);
}
positive=sump/RSIPeriod;
negative=sumn/RSIPeriod;
// PosBuffer[i]=positive;
// NegBuffer[i]=negative;
if(positive+negative!=0){MyRSIBuffer[i]=100.0*positive/(positive+negative);}
else{MyRSIBuffer[i] = 0; }
}
//----
return(0);
}
//+------------------------------------------------------------------+
/*
Омегавская формула расчета:
For Counter = 0 To MyRange-1 Begin
UpAmt = Price[Counter] - Price[Counter + 1];
If UpAmt >= 0 Then
DownAmt = 0
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpSum = UpSum + UpAmt;
DownSum = DownSum + DownAmt;
End;
UpAvg = UpSum / MyRange;
DownAvg = DownSum / MyRange;
If UpAvg+DownAvg <> 0 Then
RSI = 100 * UpAvg / (UpAvg + DownAvg)
Else
RSI = 0;*/
То, что Вы привели - это сильно упрощенный RSI. Почти все новички
делают ошибку в описании RSI, когда принимают условие сглаживания
как простое SMA.
В стандартном описании RSI про усреднение написано так:
Хотя на самом деле используется сглаженное усреднение:
В стандартном описании RSI про усреднение написано так:
Расчет
Основная формула расчета технического индикатора Relative Strength Index:
RSI = 100 - (100 / (1 + U / D))Где:
U — среднее значение положительных ценовых изменений;
D — среднее значение отрицательных ценовых изменений.
Хотя на самом деле используется сглаженное усреднение:
//+------------------------------------------------------------------+ //| Relative Strength Index | //+------------------------------------------------------------------+ int start() { int i,counted_bars=IndicatorCounted(); double rel,negative,positive; //---- if(Bars<=RSIPeriod) return(0); //---- initial zero if(counted_bars<1) for(i=1;i<=RSIPeriod;i++) RSIBuffer[Bars-i]=0.0; //---- i=Bars-RSIPeriod-1; if(counted_bars>=RSIPeriod) i=Bars-counted_bars-1; while(i>=0) { double sumn=0.0,sump=0.0; if(i==Bars-RSIPeriod-1) { int k=Bars-2; //---- initial accumulation while(k>=i) { rel=Close[k]-Close[k+1]; if(rel>0) sump+=rel; else sumn-=rel; k--; } positive=sump/RSIPeriod; negative=sumn/RSIPeriod; } else { //---- smoothed moving average rel=Close[i]-Close[i+1]; if(rel>0) sump=rel; else sumn=-rel; positive=(PosBuffer[i+1]*(RSIPeriod-1)+sump)/RSIPeriod; negative=(NegBuffer[i+1]*(RSIPeriod-1)+sumn)/RSIPeriod; } PosBuffer[i]=positive; NegBuffer[i]=negative; if(negative==0.0) RSIBuffer[i]=0.0; else RSIBuffer[i]=100.0-100.0/(1+positive/negative); i--; } //---- return(0); }
Так как Вы сменили тему и вместо предоставления полного кода
эксперта, который по разному торгует, перешли на RSI, то считаю,
что тему с экспертом закрыли.
Такое общение на статус мега терминала не тянет...
Вот код открытия, присутствующий в эксперте:
for(c=0;c<popitka;c++)
{
ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,uroven-Stop*Point,Ask+TakeProfit*Point, "Pipsoed",_MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
TimeOfTrade=TimeMinute(Time[0]); //Что бы не лезть в сделку каждую минуту
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
break;
}
}
Вам это что-то скажет?
Насчет RSI "сглаженность" не является ли "сглаженности" сигналов, то есть их отсутсвии?? В том примере, который я привел очень наглядно видно преимущество перекупленности и перепроданности на уровнях 30 и 70, чем их "сглаженность"...
Вот код открытия, присутствующий в эксперте:
for(c=0;c<popitka;c++)
{
ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,uroven-Stop*Point,Ask+TakeProfit*Point, "Pipsoed",_MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
TimeOfTrade=TimeMinute(Time[0]); //Что бы не лезть в сделку каждую минуту
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
break;
}
}
Вам это что-то скажет?
Насчет RSI "сглаженность" не является ли "сглаженности" сигналов, то есть их отсутсвии?? В том примере, который я привел очень наглядно видно преимущество перекупленности и перепроданности на уровнях 30 и 70, чем их "сглаженность"...
К сожалению, Вы не предоставили полный код эксперта и не описали
условия проверки так, чтобы можно было все повторить. А это не
позволяет ответить на Ваш вопрос.
Код все равно можно пронять только с опытом и с временем соотвествующим.
В выборке множества вариантов любой код без многолетного опыта
- мусор.
Я не перввый раз уже встречаю заявления, что тот или иной индикатор
в MetaTrader 4 считается иначе, чем в ...(тут идет название так называемого
авторитетного программного продукта).
При этом, приводя некие куски кода из другой программы технического анализа, человек ничтоже сумняшеся обычно полагает , что привел железобетонное доказательство своей правоты (и неправильности расчетов в МТ4).
Тот факт, что "найденный человеком баг" почему-то не исправляется разработчиками без сторонней помощи еще больше подзадоривает к спору.
Чтобы закрыть тему о правильности или неправильности того или иного индикатора, необходимо предоставить простые и ясные примеры - лобовые доказатекльства. Что мы имеем?
Имеем два разных индикатора, причем разница видна визуально. Можем ли мы сделать вывод, что "именно мой код, который взят из Омеги, является более правильным"?
Если сделать поиск в интренете, то можно найти вот такое определение индикатора RSI - http://www.dbceuro.com/education/studies.jsp?study=RSI
Этот же алгоритм можно увидеть в книге Роберта Колби "Энциклопедия технических индикаторов рынка". Код в пользовательском индикаторе RSI, который идет в стандартной поставке, на первый взгляд кажется сложным и запутанным. Но если Вы в свое время потратили достаточное время для разгрызания книг Билла Вильямса по его торговой системе, изложенной в книге "Новые измерения биржевой торговли", то увидели бы использование сглаженной скользящей средней на массивах, содержащих ценовые изменения (Close[i]-Close[i+1]).
При этом, приводя некие куски кода из другой программы технического анализа, человек ничтоже сумняшеся обычно полагает , что привел железобетонное доказательство своей правоты (и неправильности расчетов в МТ4).
Тот факт, что "найденный человеком баг" почему-то не исправляется разработчиками без сторонней помощи еще больше подзадоривает к спору.
Чтобы закрыть тему о правильности или неправильности того или иного индикатора, необходимо предоставить простые и ясные примеры - лобовые доказатекльства. Что мы имеем?
Имеем два разных индикатора, причем разница видна визуально. Можем ли мы сделать вывод, что "именно мой код, который взят из Омеги, является более правильным"?
Если сделать поиск в интренете, то можно найти вот такое определение индикатора RSI - http://www.dbceuro.com/education/studies.jsp?study=RSI
Этот же алгоритм можно увидеть в книге Роберта Колби "Энциклопедия технических индикаторов рынка". Код в пользовательском индикаторе RSI, который идет в стандартной поставке, на первый взгляд кажется сложным и запутанным. Но если Вы в свое время потратили достаточное время для разгрызания книг Билла Вильямса по его торговой системе, изложенной в книге "Новые измерения биржевой торговли", то увидели бы использование сглаженной скользящей средней на массивах, содержащих ценовые изменения (Close[i]-Close[i+1]).
Поэтому, я разложил пользовательский индикатор RSI на три других.
Первый индикатор (PositivePriceChange) показывает сглаженную скользящую
среднюю от положительных изменений цены.
//+------------------------------------------------------------------+ //| PositivePriceChange.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 DarkBlue //---- input parameters extern int Per=14; //---- buffers double SmoothPos[]; double PosMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(2); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,SmoothPos); SetIndexDrawBegin(0,Per); SetIndexBuffer(1,PosMapBuffer); SetIndexEmptyValue(1,0); IndicatorShortName("Smoothed Positive Price Changes("+Per+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- int i,limit,limit1; double val; if (counted_bars==0) { limit=Bars-2; limit1=Bars-Per-1; } if (counted_bars>0) { limit=Bars-counted_bars; limit1=limit; } for (i=limit;i>=0;i--) { val=Close[i]-Close[i+1]; if (val>0) PosMapBuffer[i]=val; else PosMapBuffer[i]=0.0; } for (i=limit1;i>=0;i--) { SmoothPos[i]=iMAOnArray(PosMapBuffer,0,Per,0,MODE_SMMA,i); } //---- return(0); } //+------------------------------------------------------------------+Видно, что в буфер PosMapBuffer мы записываем только положительные изменения цен закрытия, а затем сглаживаем этот буфер штатной функцией iMaOnArray() с типом сглаживания MODE_SMMA . Именно такие мувинги используются при построении Аллигатора (вот почему мне знаком алгоритм сглаживания).
Строим второй индикатор (NegativePriceChange) , аналогичный первому, только
в нем мы уже исследуем отрицательные изменения цен закрытия
на периоде Per=14 (по умолчанию).
//+------------------------------------------------------------------+ //| NegativePriceChange.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| https://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "https://www.metaquotes.net/" #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Orange //---- input parameters extern int Per=14; //---- buffers double SmoothNeg[]; double NegMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(2); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,SmoothNeg); SetIndexDrawBegin(0,Per); SetIndexBuffer(1,NegMapBuffer); SetIndexEmptyValue(1,0); IndicatorShortName("Smoothed Negative Price Changes("+Per+")"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- int i,limit,limit1; double val; if (counted_bars==0) { limit=Bars-2; limit1=Bars-Per-1; } if (counted_bars>0) { limit=Bars-counted_bars; limit1=limit; } for (i=limit;i>=0;i--) { val=Close[i]-Close[i+1]; if (val<0) NegMapBuffer[i]=-val; else NegMapBuffer[i]=0.0; } for (i=limit1;i>=0;i--) { SmoothNeg[i]=iMAOnArray(NegMapBuffer,0,Per,0,MODE_SMMA,i); } //---- return(0); } //+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Брокер FXDD, два разных демо-счета, запущенно два терминала для каждого эксперта.
Разные входы... :(
Если несколько экспертов на одном счете, то же разнятся результаты,
раньше думал "разделение торгового потока"... Повесил каждого на свой терминал, то же самое...
Может это уже обсуждалось, может нет....
Да, если успеть заметить, что один из них тупит и перезапустить, то сделку откроет...
PS: В следующей версии будет возможность тестировать портфель экспертов на разных валютах?
PPS: Удобно было бы сохранять результаты оптимизации с параметрами а не просто конечный результат...
Спасибо за внимание и возможное участие.