#126

У меня возникла еще одна проблема. На этот раз с другим индикатором. Индикатор представляет собой непростую скользящую среднюю, которая имеет три цвета. Для условия открытия сделки мне нужно взять из индюка значение цены и цвета, но я не могу этого сделать.

int colorma =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 0, 0);
int colorma2 =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 1, 0);
int colorma3 =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 2, 0);
С цветом я вроде разобрался, но я не уверен что это правильно. Как получить цену этой линии? Индикатор я прикрепил.

VininI_LRMA_color.mq422 скач.

#127

У тебя все правильно. Если заглянуть внутрь индикатора то можно сказать что Желтая линия 0 буфер всегда имеет расчетное значение. а Зеленый и красный цвет индикатор принимает только если желтая линия на текущем боте больше или меньше чем на предыдущем баре. Сделаем вывод ты все сделал правильно. Само значение индикатора ты берешь с 0 буфера а значение для принятия торгового решения основываясь на цвет с 1 или 2.

#128


У тебя все правильно. Если заглянуть внутрь индикатора то можно сказать что Желтая линия 0 буфер всегда имеет расчетное значение. а Зеленый и красный цвет индикатор принимает только если желтая линия на текущем боте больше или меньше чем на предыдущем баре. Сделаем вывод ты все сделал правильно. Само значение индикатора ты берешь с 0 буфера а значение для принятия торгового решения основываясь на цвет с 1 или 2.


Еще раз спасибо тебе, ты всё очень доступно разъяснил! :)

Добавлено: 09-01-2014 15:17:45

Возможно, я чего-то не понял и туплю, но мой советник не хочет открывать ордера. Как мне написать код чтобы сов открывал ордер, если цена выше/ниже линии индикатора + цвет линии синий/красный? Я написал так:
double pricema =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 0, 0);
double colorma2 =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 1, 0);
double colorma3 =iCustom(Symbol(), 0, "ViniL LRMA color", period, pricem, Shiftm, 2, 0);

if (colorma2>0 && colorma3==EMPTY_VALUE && Ask>pricema) {открываем ордер на покупку}
Если тут всё правильно, то значит я допустил ошибку в другом месте. Ведь нулевой буфер дает значение цены, на которой находится линия индикатора. Я правильно понял?

Изменено 9 января, 2014 пользователем Hurricane in the head

#129

Правильно, введи несколько комментариев внутри этого алгоритма и посмотри что не так.

#130

Прошу помощи в исправлении очередного эксперементального индикатора. На этот раз по анализу и сведению статистики входов на основании ГСЧ. Файл у меня генерируется и работает отлично, но вот в окне он почему-то не отражается. Но увы знаний в области индикаторов у меня нехватает, я попробовал внести все что было мне известно и о чем узнал, но мне это непомогло добиться результата.

Подручный_Властелина.mq423 скач.

#131


Правильно, введи несколько комментариев внутри этого алгоритма и посмотри что не так.

Оказалось что в функции iCustom я неправильно написал имя пользовательского индикатора. Я себе уже всю голову сломал, вот до чего доводит невнимательность! :)
#132

Нужен файл для анализа.

#133
nicholas, спасибо за отклик. Какой файл необходим на анализ? Если тот что он сгенерировал. То Вы можете запустить индюк у себя и он его тоже сгенерирует. А индикатор я вроде выложил. Основная проблема в том что независимо от исхода виртуальной сделки в файл все записывается правильно а в буфер не выводится. Хотя я вроде делал так чтоб было похоже на череду импульсов

Изменено 10 января, 2014 пользователем Ttomas

#134

Нерасстраивайся. Название индюка тоже не гладкое, а с заковыркой. Я обычно чтоб не ошибиться в названии индюка перетаскиваю его из библиотеки в код и удаляю расширение и параметр инклуд. Оставляю только имя.

#135


Нерасстраивайся. Название индюка тоже не гладкое, а с заковыркой. Я обычно чтоб не ошибиться в названии индюка перетаскиваю его из библиотеки в код и удаляю расширение и параметр инклуд. Оставляю только имя.


Если не сложно, можешь помочь еще с одним индикатором? Это видоизмененная матрица. Только суть этой матрицы в том что она показывает не кубики, а полосы. Т.е. если все четыре кубика красные - индикатор показывает красную полосу, а если 3 из 4 красные - он показывает серую полосу. Аналогично для синего цвета. Мне нужно взять за условие открытия сделки цвет индикатора, но я запутался в буферах, там их аж 8 штук.

STSn_Tape.mq417 скач.
Матрица.PNG

#136

Тут несколько посложнее. основную смуту вносит тот факт что второй буфер используется как для отображения направления вверх так и для отображения серого цвета. Кусок кода я составлять не буду просто опишу.

Вопервых я бы посоветовал внутри индюка убрать все лишние строковые внешние переменные.
Вовторых Напиши присвоение 4м переменным значений первых четырех буферов. Далее будут 5 варианта исходов. Если Используется параметр 3 из 4х то у тебя будут только 2 цвета синий и красный поэтому для того чтобы сигнал сформировался нужно проверить 2 переменные отвечающие за эти направления 0 и 2 буфер за синий цвет, а также 1 и 3 буфера за красный цвет. Если параметр 3 из 4х выключен то у тебя возможны 3 варианта. Синий если буфер 0 равен 1, Красный если буфер 1 равен единице. И Серый если буфер 2 равен единице. Тебе просто нужно дополнительно проверить параметр который ты передаешь индикатору.

#137


Тут несколько посложнее. основную смуту вносит тот факт что второй буфер используется как для отображения направления вверх так и для отображения серого цвета. Кусок кода я составлять не буду просто опишу.

Вопервых я бы посоветовал внутри индюка убрать все лишние строковые внешние переменные.
Вовторых Напиши присвоение 4м переменным значений первых четырех буферов. Далее будут 5 варианта исходов. Если Используется параметр 3 из 4х то у тебя будут только 2 цвета синий и красный поэтому для того чтобы сигнал сформировался нужно проверить 2 переменные отвечающие за эти направления 0 и 2 буфер за синий цвет, а также 1 и 3 буфера за красный цвет. Если параметр 3 из 4х выключен то у тебя возможны 3 варианта. Синий если буфер 0 равен 1, Красный если буфер 1 равен единице. И Серый если буфер 2 равен единице. Тебе просто нужно дополнительно проверить параметр который ты передаешь индикатору.

Для меня это будет несколько сложновато .:)
На самом деле я тупанул, для обычной матрицы написать код гораздо легче - там 8 буферов и каждые 2 отвечают за цвет одного кубика. Огромное тебе спасибо, можно сказать что ты меня научил брать данные из различных индикаторов! Возможно, эта тема еще многим пригодится. Я тебе очень признателен.
#138

Обращаюсь к вам с вопросом о помощи для связи с программистом, могущим
помочь в небольшой переделке индикатора - MA Chanels FIBO. Этот индикатор строит Fibo уровни на основе MA 100 или MA200. Мне требуется вписать в него (добавить) три уровня 76.4%; 88.2%; 100%.
С уважением
Евгений.

#139

Не вижу индикатор.

#140

Вот этот индикатор - MA Chanels FIBO. Сам я смог только поменять уровни, одни на другие. Добавить
не могу. Никогда не программировал. Для смены дошел логикой, дальше тупик.

MA_Chanels_FIBO.mq419 скач.
MA_Chanels_FIBO.ex413 скач.

#141

Сочувствую, добавить новые уровни нельзя. Все 8 буферов в советнике уже заняты старыми уровнями. Только заменять старые можно >:d


Добавлено: 24-01-2014 09:06:11

Кстати, ничего не мешает сделать 2 индикатора, как Вы сказали - уровни смогли поменять. Один старый, а другой с поменяными уровнями, и получаем - 2 индикатора и все нужные уровни на чарте ;)

Изменено 24 января, 2014 пользователем mzk_3om6u

#142

Спасибо за помощь! Я так и сделал, 2 индюка. Один старый и один с другими уровнями.
Удачи!

#143

это код болинжера, не подскажите что в нем нужно поменять что бы на экран выводилась величиа стандартного отклонения, int start()
{
int i,k,counted_bars=IndicatorCounted();
double deviation;
double sum,oldval,newres;
//----
if(Bars//---- initial zero
if(counted_bars for(i=1;i {
MovingBuffer[Bars-i]=EMPTY_VALUE;
UpperBuffer[Bars-i]=EMPTY_VALUE;
LowerBuffer[Bars-i]=EMPTY_VALUE;
}
//----
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
i=Bars-BandsPeriod+1;
if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
while(i>=0)
{
sum=0.0;
k=i+BandsPeriod-1;
oldval=MovingBuffer;
while(k>=i)
{
newres=Close[k]-oldval;
sum+=newres*newres;
k--;
}
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
UpperBuffer=oldval+deviation;
LowerBuffer=oldval-deviation;
i--;
}
//----
return(0);
}

#144

а что такое ВСО?

#145


а что такое ВСО?




нижняя и верхняя линия находится как раз на величине стандартных отклонений, мне прост нужно что бы эти величины были выведены на экран)

Добавлено: 24-01-2014 14:29:12

Стандартное отклонение, среднеквадратичное отклонение, СКО, выборочное стандартное отклонение (англ. standard deviation, STD, STDev) — очень распространенный показатель рассеяния в описательной статистике. Но, т.к. технический анализ сродни статистике, данный показатель можно (и нужно) использовать в техническом анализе для обнаружения степени рассеяния цены анализируемого инструмента во времени.

Добавлено: 24-01-2014 14:36:38

Расчет

Полосы Боллинджера формируются из трех линий. Средняя линия (MIDDLE LINE, ML) — это обычное скользящее среднее.

ML = SUM (CLOSE, N) / N = SMA (CLOSE, N)

Верхняя линия (TOP LINE, TL) — это та же средняя линия, смещенная вверх на определенное число стандартных отклонений (D).

TL = ML + (D * StdDev)

Нижняя линия (BOTTOM LINE, BL) — это средняя линия, смещенная вниз на то же число стандартных отклонений.

BL = ML — (D * StdDev)

StdDev = SQRT (SUM ((CLOSE - SMA (CLOSE, N))^2, N)/N)

где:

SUM (..., N) — сумма за N периодов;
CLOSE — цена закрытия;
N — количество периодов, используемых для расчета;
SMA — простая скользящая средняя;
SQRT — квадратный корень;
StdDev — стандартное отклонение:

gbpusdm.png

Изменено 24 января, 2014 пользователем Валерий123451

#146

и в чем проблема добавить вывод на экран 2 строчки из буферов?
вроде во 2 уроке это было.

#147


и в чем проблема добавить вывод на экран 2 строчки из буферов?
вроде во 2 уроке это было.



пересмотрю еще раз, прост недавно начал смотреть видео уроки по mql4, тк больше предпочитаю ручную торговлю, не как прост не разберусь в коде болингера, где сама формула и что нужно выводить..
#148

Наслаждайся.


//+------------------------------------------------------------------+
//| Bands.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//---- indicator parameters
extern int BandsPeriod=20;
extern int BandsShift=0;
extern double BandsDeviations=2.0;
//---- buffers
double MovingBuffer[];
double UpperBuffer[];
double LowerBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MovingBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,UpperBuffer);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LowerBuffer);
//----
SetIndexDrawBegin(0,BandsPeriod+BandsShift);
SetIndexDrawBegin(1,BandsPeriod+BandsShift);
SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Bollinger Bands |
//+------------------------------------------------------------------+
int start()
{
int i,k,counted_bars=IndicatorCounted();
double deviation;
double sum,oldval,newres;
//----
if(Bars//---- initial zero
if(counted_bars for(i=1;i {
MovingBuffer[Bars-i]=EMPTY_VALUE;
UpperBuffer[Bars-i]=EMPTY_VALUE;
LowerBuffer[Bars-i]=EMPTY_VALUE;
}
//----
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
i=Bars-BandsPeriod;
if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;
while(i>=0)
{
sum=0.0;
k=i+BandsPeriod-1;
oldval=MovingBuffer;
while(k>=i)
{
newres=Close[k]-oldval;
sum+=newres*newres;
k--;
}
deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
UpperBuffer=oldval+deviation; //верхняя полоска
LowerBuffer=oldval-deviation; //нижняя полоска
SetLabel("UPPER", DoubleToStr(UpperBuffer, Digits), Black, 50, 100);
SetLabel("LOWER", DoubleToStr(LowerBuffer, Digits), Black, 100, 100);
// SetLabel - можешь покрутить параметры, куда тебе данные воткнуть надо.
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 12.10.2007 |
//| Описание : Установка текстовой метки, объект OBJ_LABEL. |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| nm - наименование объекта |
//| tx - текст |
//| cl - цвет метки |
//| xd - координата X в пикселах |
//| yd - координата Y в пикселах |
//| cr - номер угла привязки (0 - левый верхний, |
//| 1 - правый верхний, |
//| 2 - левый нижний, |
//| 3 - правый нижний ) |
//| fs - размер шрифта (9 - по умолчанию ) |
//+----------------------------------------------------------------------------+
void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
if (ObjectFind(nm) ObjectSetText(nm, tx, fs);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_XDISTANCE, xd);
ObjectSet(nm, OBJPROP_YDISTANCE, yd);
ObjectSet(nm, OBJPROP_CORNER , cr);
ObjectSet(nm, OBJPROP_FONTSIZE , fs);
}
#149

Если я правильно все понял, то мне достаточно прописать вывод на экран вот этих значений

UpperBuffer=oldval+deviation; //верхняя полоска
LowerBuffer=oldval-deviation; //нижняя полоска

#150

Если честно, я даже не знаю че тебе сказать...

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025