Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
спасибо за ответ.
проверил h1, m30, m15, m5, m1
по-прежнему работает только один цвет, красный.
Это то, что я вам говорил: для 3-го цвета (когда оба значения попадают в один диапазон значений) вам нужно изменить код, чтобы добавить опцию для 3-го цвета
Вот версия, которая использует один столбец. Если вы хотите третий цвет, вам нужно добавить новую опцию
на 2мин ренко живом графике, это просто 2 зеленых столбика сверху и все для всех пар, на которых я устал, это нормально?
на 2мин ренко живом графике, просто 2 зеленых столбика сверху и все для всех пар, на которых я его использовал, это нормально?
Я не использую ренко графики
Он использует встроенные индикаторы (iBEarsPower() и iBullsPower()), так что если есть какие-то проблемы с ним, то проблема уже во встроенных индикаторах.
Это то, что я вам говорил: для 3-го цвета (когда оба значения попадают в один диапазон значений) вам нужно изменить код, чтобы добавить опцию для 3-го цвета
Ок. Спасибо!!!
Младен,
Я изучил и поиграл с "простым mtf" из поста #1874.
Обратите внимание: это MA из MA, и она способна к MTF.
У меня есть несколько вопросов:
Независимо от того, что я делаю с кодом, я не могу понять, что делает 'returnBars', если вообще что-то делает.
1. Что определяет, требуется ли количество измененных баров в целевом таймфрейме и почему?
2. Что касается этой строки:
returnBars = TimeFrame == "returnBars"; // проверяем, запрашивается ли количество измененных баров.
Я не являюсь высокообразованным программистом. Я не знаю этой сложной конструкции. Я также не знаю правил смешивания типов переменных.
Похоже, что строковая переменная Timeframe получает значение булевой переменной returnBars.
Затем она присваивает значение returnBars - снова. ??
Поскольку returnBars является булевой переменной, присвоить '1', если TimeFrame больше 0, иначе присвоить '0'?
3. Я устанавливаю индикатор на более высокий ТФ, и тестирую в реальном времени (вперед) на много баров, или в тестере стратегий. Я могу удалить линию, которая его использует, и не получить НИКАКИХ изменений на линиях индикатора:
if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));
// if (returnBars) { ma1[0] = limit+1; return(0); }
В строке комментария на экране будет показано "returnBars 1".
Я не знаю, где он получает значение '1'.
Без части 'if' он всегда показывает '0'.
Те же результаты, если поместить его в Init().
Big Be
mladen,
Я изучил и поиграл с "простым mtf" из сообщения #1874.
Примечание: Это MA из MA, и MTF способен.
У меня есть несколько вопросов:
Независимо от того, что я делаю с кодом, я не могу понять, что делает 'returnBars', если вообще что-то делает.
1. Что определяет, требуется ли количество измененных баров в целевом таймфрейме и почему?
2. Что касается этой строки:
returnBars = TimeFrame == "returnBars"; // проверяем, запрашивается ли количество измененных баров.
Я не являюсь высокообразованным программистом. Я не знаю этой сложной конструкции. Я также не знаю правил смешивания типов переменных.
Похоже, что строковая переменная Timeframe получает значение булевой переменной returnBars.
Затем она присваивает значение returnBars - снова. ??
Поскольку returnBars является булевой переменной, присвоить '1', если TimeFrame больше 0, иначе присвоить '0'?
3. Я устанавливаю индикатор на более высокий ТФ, и тестирую в реальном времени (вперед) на много баров, или в тестере стратегий. Я могу удалить линию, которая его использует, и не получить НИКАКИХ изменений на линиях индикатора:
if (returnBars) Comment("returnBars ",returnBars, " Tick ",Volume(0));
// if (returnBars) { ma1[0] = limit+1; return(0); }
В строке комментария на экране будет показано "returnBars 1".
Я не знаю, где он получает значение '1'.
Без части 'if' он всегда показывает '0'.
Те же результаты, если поместить его в Init().
Большой БеBig Be
Представьте себе следующее:
1. Вы работаете на 15-минутном графике, а ваш индикатор показывает данные за 1 час. Сколько баров изменилось за последний тик на 15-минутном графике и сколько на часовом? Функция Return bars проверяет это. Это число не должно быть каким-то предполагаемым значением (выберите таймфрейм, который вы давно не посещали на своих графиках, и посмотрите, что произойдет, когда metatrader начнет загружать данные для этого таймфрейма - вы должны проверить, сколько новых баров было загружено, иначе вам придется прыгать туда-сюда по таймфреймам, чтобы иметь точное состояние для прошлых баров многотаймфреймового индикатора).
2. Of returnBars = TimeFrame == "returnBars";
У вас есть одно присваивание ("=") и одно логическое сравнение ("=="). Это означает, что returnBars должен получить результат логического сравнения двух строк (TimeFrame и "returnBars").
3. ReturnBars - это переменная типа boolean. Она может иметь два значения: 0, что равно "false", и 1, что равно "true". Вот почему вы получаете 1 для returnBars (это означает, что returnBars установлен в "true").
______________
PS: если бы это было по правилам C/C++ для boolean, то любое значение, отличное от 0, считалось бы истинным, и вы можете проверить переменные metatrader таким же образом (например, if(someDoubleValue) проверяет, отличается ли someDoubleValue от 0), но metatrader присваивает переменным типа boolean значения 0 и 1.
Уважаемый Младен
Я не могу понять, как перерисовывается индикатор Poalln. Я знаю, что iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) или iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) означает будущие значения, однако при расчете последнего бара нет данных для i-8.
Я думаю, что это будет ноль. Так как же Поллан перерисовывает?
Лучше всего,
Уважаемый Младен
Не могу понять, как перерисовывается индикатор Poalln. Я знаю, что iRSI(NULL,0,RSI,PRICE_TYPICAL,i-8) или iCCI(NULL,0,CCI,PRICE_TYPICAL,i-8) означает будущие значения, однако при расчете последнего бара нет данных для i-8.
Я думаю, что это будет ноль. Так как же Поллан перерисовывает?
Лучшее,IXI
На текущем баре он получает значения 0 для этих баров. На первом прошлом баре он получает 1 будущее значение и 7 нулей. И так далее.
По мере формирования новых баров, бары, которые получали нули для результатов будущих значений, на самом деле получают реальные будущие результаты, а затем эти значения изменяются в соответствии с этими "новыми" будущими значениями.
Как заставить этот индикатор работать на парах с японской йеной
Здравствуйте,
Этот индикатор делает линию с каждым круглым числом и одну линию на 15 пунктов с каждой стороны от круглого числа.
Но он не работает с парами JPY.
Что нужно изменить, чтобы он работал?
extern color UpperLineColor = Red;
extern color MainLineColor = Red;
extern color LowerLineColor = Red;
extern double HighOffset = 150;
extern double LowOffset = 150;
extern int LineStyle = 2;
extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";
double LineSpaceOld;
double Hoch;
double Tief;
bool FirstRun = true;
double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)
string LineText = "RoundNr ";
string LineText1 = "RoundNr1 ";
string LineText2 = "RoundNr2 ";
int deinit()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
ObjectDelete(LineText+DoubleToStr(i,2));
ObjectDelete(LineText1+DoubleToStr(i,2));
ObjectDelete(LineText2+DoubleToStr(i,2));
}
return(0);
}
int start()
{
if(FirstRun)
{
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
FirstRun = false;
}
else if(LineSpace != LineSpaceOld)
{
deinit();
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
}
DrawLines();
LineSpaceOld = LineSpace;
return(0);
}
void DrawLines()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
string StringNr = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
else // Adjustments
{
ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
else // Adjustments
{
ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
else // Adjustments
{
ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
}
WindowRedraw();
}Привет,
Эта программа строит линию с каждым круглым числом и одну линию на 15 пунктов в каждую сторону от круглого числа.
Но он не работает с парами JPY.
Что нужно изменить, чтобы это работало?
extern color UpperLineColor = Red;
extern color MainLineColor = Red;
extern color LowerLineColor = Red;
extern double HighOffset = 150;
extern double LowOffset = 150;
extern int LineStyle = 2;
extern string LineStyleInfo = "0=Solid,1=Dash,2=Dot,3=DashDot,4=DashDotDot";
double LineSpaceOld;
double Hoch;
double Tief;
bool FirstRun = true;
double LineSpace = 1.0; // 1 unit = 0.01 of basic value (e.g. 1 USD cent)
string LineText = "RoundNr ";
string LineText1 = "RoundNr1 ";
string LineText2 = "RoundNr2 ";
int deinit()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
ObjectDelete(LineText+DoubleToStr(i,2));
ObjectDelete(LineText1+DoubleToStr(i,2));
ObjectDelete(LineText2+DoubleToStr(i,2));
}
return(0);
}
int start()
{
if(FirstRun)
{
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
FirstRun = false;
}
else if(LineSpace != LineSpaceOld)
{
deinit();
Hoch = NormalizeDouble( High, 2 );
Tief = NormalizeDouble( Low, 2 );
}
DrawLines();
LineSpaceOld = LineSpace;
return(0);
}
void DrawLines()
{
double AbSpace = 0.01*LineSpace;
double Oben = MathRound(110*Hoch)/100;
double Unten = MathRound(80*Tief)/100;
for(double i=0; i<=Oben; i+=AbSpace)
{
if(i<Unten) { continue; }
string StringNr = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText+StringNr) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText+StringNr, OBJ_HLINE, 0, 0, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
else // Adjustments
{
ObjectSet(LineText+StringNr, OBJPROP_PRICE1, i);
ObjectSet(LineText+StringNr, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText+StringNr, OBJPROP_COLOR, MainLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr1 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText1+StringNr1) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText1+StringNr1, OBJ_HLINE, 0, 0, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
else // Adjustments
{
ObjectSet(LineText1+StringNr1, OBJPROP_PRICE1, i+(HighOffset/100000));
ObjectSet(LineText1+StringNr1, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText1+StringNr1, OBJPROP_COLOR, UpperLineColor);
}
//#######################################################################
if(i<Unten) { continue; }
string StringNr2 = DoubleToStr(i,2); // 2 digits number in object name
if (ObjectFind(LineText2+StringNr2) != 0) // HLine not in main chartwindow
{
ObjectCreate(LineText2+StringNr2, OBJ_HLINE, 0, 0, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
else // Adjustments
{
ObjectSet(LineText2+StringNr2, OBJPROP_PRICE1, i-(LowOffset/100000));
ObjectSet(LineText2+StringNr2, OBJPROP_STYLE, LineStyle);
ObjectSet(LineText2+StringNr2, OBJPROP_COLOR, LowerLineColor);
}
}
WindowRedraw();
}Джорджбейкер,
Почему бы вам не использовать некоторые из индикаторов вроде этого: https: //www.mql5.com/en/forum/180648/page307 в качестве основы для вашего индикатора? Это может сэкономить вам время на кодирование.