Ваши вопросы по языку MQL4

_SERG_

Активный участник
Привет! Не, такие глюки частенько бывают и по Bid тоже - выскакивает после запятой больше цифр, чем нужно. У меня даже на демо в онлайне такая фигня была и сов выдавал ошибки при работе с ордерами.

Влад, ты ж мою позицию по вопросу точности знаешь, надо сразу все даблы нормализовать до требуемых значений, а только потом с ними работать.

Пришлось приведение типов освежить недавно. :laugh:

Я больше заинтересовался фразой по поводу расчётного ASK.
..... проверку не на Ask (так как это величина расчётная), ...
 

блондинка

Элитный участник
Привет!
В индикаторе WavyDash два буфера (0,1)
0 - это линия красного цвета
1 - это линия зеленого цвета
Тот индикатор, который пытаюсь написать должен брать из этих буферов данные и
считать переменную (например wd) которая должна равняться нулю (если цвет линии красный) и единице (если зелёная) Либо другие но разные величины.
строчка кода примерно по типу такому должна получиться

wd=NormalizeDouble(iCustom(Symbol(),PERIOD_CURRENT,"WavyDash",……………………………, i,), Digits);

Не знаю как её корректно задать с учётом цвета)))
Мне нужно только с такой переменной разобраться.Остальное уже есть.
Если это бред не судите строго)))
 

Вложения

  • WavyDash.mq4
    1,7 КБ · Просмотры: 20
Последнее редактирование:

vladradon

Программист
В индикаторе WavyDash два буфера (0,1)
0 - это линия красного цвета
1 - это линия зеленого цвета
Тот индикатор, который пытаюсь написать должен брать из этих буферов данные и
считать переменную (например wd) которая должна равняться нулю (если цвет линии красный) и единице (если зелёная)
Может попробовать проверять получаемое значение на EMPTY_VALUE и если оно не пустое на одном из буферов, то присваиваем одно значение переменной (на другом буфере точно будет EMPTY_VALUE) и наоборот, если на первом пустое, то на втором будет какое-то не пустое и переменной присваиваем другое значение.
А можно добавить 3-й буфер сигнальный, который будет выдавать 0 при красном и 1 при зеленом и считывать его показания wd=iCustom...:
 

Вложения

  • WavyDash1.mq4
    1,8 КБ · Просмотры: 31
Последнее редактирование:

блондинка

Элитный участник
Спасибо.Но поняла не много...
Мне бы саму строчку увидеть какая она?
wd=iCustom...
Это значение (wd) я потом вставлю в
if (wd >...)
то рисуется стрелка например вниз (для стрелки ещё есть условия из другого индикатора)
или можно из вашей версии
SetIndexBuffer(2,exit);
SetIndexStyle(2,DRAW_NONE)
как c этим нарисовать эту строчку(вставить туда значение exit) ?
wd=
 
Последнее редактирование:

vladradon

Программист
Мне бы саму строчку увидеть какая она?
wd=iCustom...
Я не совсем понимаю, что требуется в итоге. Строчка считывания
PHP:
wd=iCustom(NULL,0,"WavyDash1",10,2,0);
Это для моей версии. Но она не выдает значения - только сигналы. Или можно так:
PHP:
if(iCustom(NULL,0,"WavyDash1",10,2,0)==0) wd=iCustom(NULL,0,"WavyDash1",10,0,0);
if(iCustom(NULL,0,"WavyDash1",10,2,0)==1) wd=iCustom(NULL,0,"WavyDash1",10,1,0);
Я не знаю, важны ли точные значения индикатора для дальнейших расчетов. 10 - входной параметр Back.
 
Последнее редактирование:

блондинка

Элитный участник
Спасибо большое!
Мне важно было увидеть это)))
Буду экспериментировать по вашим подсказкам.
 

блондинка

Элитный участник
Ничего не получилось(((
Вот это условие возникновения стрелки на чарте работает

tP=iCustom(NULL,0,"Trend",trendPeriod,timeFrame,2,Li_16);
if(tP > 0.5)
{G_ibuf_92[Li_16] =Imaxx(Li_16)+(10*Point);}
if(tP < -0.5)
{G_ibuf_96[Li_16] =Iminn(Li_16)-(10*Point);}

}
}
//----
return (0);
а как сюда добавить ещё одно условие wp=0 wp=1
или то же самое wp>0.5 wp<0.5
из другого индикатора "WawyDash1".что бы учитывался и он на те же стрелки (фильтровал)
никак не получается-то ни одной стрелки то сразу все
 
Последнее редактирование:

блондинка

Элитный участник
УРА!
Всё получилось.Понять трудно почему но работает)))
Просьба последняя снимается.
Огромное спасибо VLADRADON!!!
 

vladradon

Программист
из другого индикатора "WawyDash1".что бы учитывался и он на те же стрелки (фильтровал)
никак не получается-то ни одной стрелки то сразу все
Я там опечатался сначала и потом исправил имя индикатора "WavyDash1".
 

блондинка

Элитный участник
Ещё одна просьба)
Это стрелочный индикатор.Стрелка перерисовывается (перемещается на следующую свечу) до её фиксации (пока не закроется свеча с направлением как у стрелки). Как только стрелка зафиксировалась - тренд по стрелке.Он не должен перерисовываться.
В индикаторе всего два буфера (0,1) и они для стрелок.
Необходимо организовать в индикаторе ещё один буфер(2) для тренда.
Буфер(2) имеет значение 1 при тренде вверх и 0 при тренде вниз.
Выводить его на экран не надо.
Если кто понял что написала буду рада.
Ещё больше если кто сделает.)))
Заранее спасибо.
 

Вложения

  • #Momentum onChartSignals Indicator v1.0.mq4
    6,9 КБ · Просмотры: 29

mobidik

-----
Ещё одна просьба)
Это стрелочный индикатор.Стрелка перерисовывается (перемещается на следующую свечу) до её фиксации (пока не закроется свеча с направлением как у стрелки). Как только стрелка зафиксировалась - тренд по стрелке.Он не должен перерисовываться.
В индикаторе всего два буфера (0,1) и они для стрелок.
Необходимо организовать в индикаторе ещё один буфер(2) для тренда.
Буфер(2) имеет значение 1 при тренде вверх и 0 при тренде вниз.
Выводить его на экран не надо.
Если кто понял что написала буду рада.
Ещё больше если кто сделает.)))
Заранее спасибо.

:)
 

Вложения

  • #Momentum onChartSignals Indicator v1.1.mq4
    14,6 КБ · Просмотры: 45
  • #Momentum onChartSignals Indicator v1.1.png
    #Momentum onChartSignals Indicator v1.1.png
    35,6 КБ · Просмотры: 80

vladradon

Программист
Буфер(2) имеет значение 1 при тренде вверх и 0 при тренде вниз.
Выводить его на экран не надо.
Если кто понял что написала буду рада.
Ещё больше если кто сделает.)))
Свою версию тоже выложу. Я убрал дублирование стрелок на следующем баре.
mobidik, у тебя ошибка получается в
PHP:
Trend[i] = Trend[i-1];
при i=0 (первый проход цикла) индексация Trend[i-1]=-1.;)
И еще у меня выдает в тестере деление на 0 в строке
PHP:
if(atrVal!=0 && adxVal!=0) signalVal = (momVal / (atrVal + adxVal)) - subtractFromSignalVal;
- ввел проверку на всякий случай.
 

Вложения

  • #Momentum onChartSignals Indicator v1.11.mq4
    14,7 КБ · Просмотры: 53

vladradon

Программист
Свою версию тоже выложу. Я убрал дублирование стрелок на следующем баре.
Там только остается один неправильный момент: когда индикаторы и их взаиморасчет для выдачи сигнала на текущем баре плавают около уровня переключения бай/селл, пока формируется бар, сигнал может несколько раз поменяться и останется в итоге последний и может снова отрисоваться стрелка, как на предыдущем баре, или противоположная, хотя реальной смены тренда нет. Такое наблюдается при длительном флэте и это не связано с дублированием стрелок, а с недостатком расчетного алгоритма.
 

блондинка

Элитный участник
Там только остается один неправильный момент: когда индикаторы и их взаиморасчет для выдачи сигнала на текущем баре плавают около уровня переключения бай/селл, пока формируется бар, сигнал может несколько раз поменяться и останется в итоге последний и может снова отрисоваться стрелка, как на предыдущем баре, или противоположная, хотя реальной смены тренда нет. Такое наблюдается при длительном флэте и это не связано с дублированием стрелок, а с недостатком расчетного алгоритма.
Привет!Ваш вариант категорически не подключается по icustom.Не знаю как это точно называется.
При всех "непонятках" в итоге добилась что задумала.) Алгоритм работает.Главное результат.Стрелки в индикаторе роли не играют,выкинуть их как и аллерты) Всем большое спасибо за помощь и оперативность.
 
Последнее редактирование:

vladradon

Программист
Привет!Ваш вариант категорически не подключается по icustom.Не знаю как это точно называется.
При всех "непонятках" в итоге добилась что задумала.) Алгоритм работает.Главное результат.Стрелки в индикаторе роли не играют,выкинуть их как и аллерты) Всем большое спасибо за помощь и оперативность.
Там в алгоритме были ошибки во первых (нужно при сигнализации еще учитывать был ли до этого какой-то сигнал или был противоположный), во вторых прилагаю сова, который считывает с моей (любой, если имя поменять индикатора) версии сигнал правильно, а не так, как в комментах прописано в считывании по iCustom. В считывании по iCustom должны быть прописаны все входные параметры, даже которые не участвуют в работе (образец в сове) и чисто информационные. Пробуйте - у меня все работает.
Перевыложил индюка - в спешке забыл отключить тестовые алерты сигналов.
 

Вложения

  • TestMomentum.mq4
    1,6 КБ · Просмотры: 29
  • Test.png
    Test.png
    38,9 КБ · Просмотры: 65
  • #Momentum onChartSignals Indicator v1.11.mq4
    14,9 КБ · Просмотры: 35
Последнее редактирование:

tinkin

Прохожий
Прошу помочь с мартином

Добрый день. Прошу помочь с проблемой...:please:
Есть код в советнике, который при закрытии предыдущего лота с убытком увеличивает значение переменной на 1:
double Lots1()
{
int file1; //инициализация лог-файла
int LossCount1 = GlobalVariableGet("Lot"+IntegerToString(Magicus1));//получение количества убыточных сделок на момент прошлого закрытия терминала (LossCount1)
double LOT = NormalizeDouble(AccountFreeMargin()/drawdown1*Point*MathPow(10,Digits-2)*DLot_percent1,1);//расчет лота в %от депозита

int total = OrdersHistoryTotal();//загрузка истории ордеров
for (int i = 0; i < total; i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magicus1)//если ордер удовлетворяет условиям
{
if (OrderProfit() > 0)
{
LossCount1 = 0; //если получен профит - переменная LossCount1 обнуляется
}
else
{
LossCount1++; //если получен убыток - переменная LossCount1 увеличивается на 1
}
}
}
if (LOT>=MaxLot) LOT = MaxLot; //ограничение максимального размера лота
double Lot=LotsArray[LossCount1]*LOT; //расчет размера лота исходя из значения переменной LossCount1

file1=FileOpen("1EG.txt", FILE_READ|FILE_WRITE); //выгрузка значений переменной в файл (так обнаружилась ошибка)
FileSeek(file1, 0, SEEK_END);
FileWrite(file1,LossCount1);
FileClose(file1);

GlobalVariableSet("Lot"+IntegerToString(Magicus1),LossCount1); //запись нового значения переменной LossCount1 в глобальную переменную
if (Lot>10000) Lot=10000; //проверка максимально допустимого значения лота
return(Lot); //возврат расчетного значения лота в ордер
}

Уже второй пытаюсь понять, почему при тестировании советника переменная LossCount1 принимает значения 0,1,3,6,9,0,1,2,0,1,2,3,4,0 и т.д?

Проблема в том, что до получения первого профита переменная увеличивается не на +1, а на +2 и +3, а после первого профита увеличивается как положено на +1...
 

vladradon

Программист
Привет!Ваш вариант категорически не подключается по icustom.Не знаю как это точно называется.
Вообще, лучший вариант - это собрать все алгоритмы индюков в одном индюковском файле (а не запускать по каждому тику считывание по внешним (в том числе стандартным) индюкам). Недавно только собирал гибриды (выкладываю), которые (а их было много) модераторы почему-то поудаляли с местных форумов.
 

Вложения

  • MA_Moving Average_СJCF.mq4
    82,8 КБ · Просмотры: 26

Violetta

Новичок форума
Уважаемые программисты, есть индикатор зигзаг, выставляет точки в момент когда фактически образовалась вершина,а в режиме allpoint выставляются точки, когда вершина каждый раз пробивается, мне необходимо чтобы вместо множества этих точек появлялась одна, которая отходит от начальной(когда определилась вершина) на порог(depth). Пробовала сама что-то наваять, но все едет по графику.
В индике так:
if(High>zzH[last])
{
zzH[last]=0;
zzH=High;
if(AllPoint) ArrUp=High;

Пробовала сделать так:
if(High>zzH[last])
{
zzH[last]=0;
zzH=High;
if(High>ArrUp+depth) Arr2Up=High;
ну и выходит ерунда.
Не судите строго, только до половины дочитала учебник С.Ковалева.
 

Вложения

  • FastZZ_Point.mq4
    3,8 КБ · Просмотры: 19

mobidik

-----
Уважаемые программисты, есть индикатор зигзаг, выставляет точки в момент когда фактически образовалась вершина,а в режиме allpoint выставляются точки, когда вершина каждый раз пробивается, мне необходимо чтобы вместо множества этих точек появлялась одна, которая отходит от начальной(когда определилась вершина) на порог(depth). Пробовала сама что-то наваять, но все едет по графику.
В индике так:
PHP:
         if(High[i]>zzH[last])
         {
            zzH[last]=0;
            zzH[i]=High[i];
            if(AllPoint) ArrUp[i]=High[i];

Пробовала сделать так:
PHP:
         if(High[i]>zzH[last])
         {
            zzH[last]=0;
            zzH[i]=High[i];
            if(High[i]>ArrUp[i]+depth) Arr2Up[i]=High[i];
ну и выходит ерунда.
Не судите строго, только до половины дочитала учебник С.Ковалева.

Скорее всего, порог у Вас задан в пипсах - нужно умножить на Point.
Пробуйте сделать так:

PHP:
         if(High[i]>zzH[last]+depth*Point)
         {
            zzH[last]=0;
            zzH[i]=High[i];
            if(AllPoint) ArrUp[i]=High[i];
 

Violetta

Новичок форума
Скорее всего, порог у Вас задан в пипсах - нужно умножить на Point.
Пробуйте сделать так:

PHP:
         if(High[i]>zzH[last]+depth*Point)
         {
            zzH[last]=0;
            zzH[i]=High[i];
            if(AllPoint) ArrUp[i]=High[i];

Ой! Спасибо большое))) Поправила, поняла, что в условии надо было это depth(depth=Depth*Point) а не в теле прописать. А ехало потому что не прописала Arr2Up=EMPTY_VALUE; сразу все ошибки видны стали)))
 
Верх