Функция ICustom - страница 12

 

Кто-нибудь может выложить простую ea, которая покупает и продает, вызывая два индикатора с помощью icustom().

Есть ли функция для закрытия отложенных ордеров.

Спасибо

 

Помощь iCustom

Здравствуйте.

Я пытаюсь модифицировать один из индикаторов FerruFX для использования пользовательских индикаторов. Я уже заставил все MA работать правильно, но я не уверен, как получить правильную информацию для двух других индикаторов. В конечном итоге я бы хотел, чтобы он отображал данные MTF от двух индикаторов, которые я прикрепил, PerkyAsctrend1 и HeikenAshi MTF. Я использую iCustom для обоих индикаторов и думаю, что я использовал правильные команды для этого.

Я могу получить данные (но не правильные данные) для PerkyAsctrend1. Я думал, что понимаю логику, чтобы заставить его отображаться правильно, но, похоже, это не так. Ferru использовал MA, CCI, MACD, ADX, Bullspower и BearsPower в своем индикаторе, но это разные виды индикаторов и, к сожалению, они не очень полезны в качестве эталона (для меня) для PerkyAsctrend1 в данной настройке.

Я думал, что индикатор HeikenAshi MTF будет достаточно легко добавить в индикатор. Очевидно, я ошибался. В колонке Heiken необъяснимым образом отображается "Label" и все они исчезают после первого тика.

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

-

Вот куски кода, которые вызывают у меня проблемы. Оба iCustoms дают мне значения 2147483647, общее количество баров в истории цен/графике.

int RISK = 4;

int AllBars = 250;

int MaMethod = 1;

int MaPeriod = 20;

//...

//...

//...

string Pesky_Trend_1 //-- , Pesky_Trend_5, Pesky_Trend_15, Pesky_Trend_30, Pesky_Trend_60, Pesky_Trend_240, Pesky_Trend_1440, Pesky_Trend_10080;

double Pesky_m_1=iCustom(NULL,PERIOD_M1, "PerkyAsctrend1", RISK, AllBars,0,shift_1);

if ((Pesky_m_1 > 0)) { Pesky_Trend_1 = "UP"; x = 416; color_indic = Lime; UP_33 = 1; DOWN_33 = 0; }

if ((Pesky_m_1 < 0)) { Pesky_Trend_1 = "DOWN"; x = 406; color_indic = Red; UP_33 = 0; DOWN_33 = 1; }

// ...

// Индикатор (Хайкен)

//...

string HA_Trend_1 //-- , HA_Trend_5, HA_Trend_15, HA_Trend_30, HA_Trend_60, HA_Trend_240, HA_Trend_1440, HA_Trend_10080;

double HA_1_1=iCustom(NULL,PERIOD_M1, "Heiken MTF",MaMethod,MaPeriod,shift_1);

double HA_2_1=iCustom(NULL,PERIOD_M1, "Heiken MTF",MaMethod,MaPeriod,shift_1+1);

if ((HA_1_1 > HA_2_1)) { HA_Trend_1 = "UP"; x = 466; color_indic = Lime; UP_41 = 1; DOWN_41 = 0; }

if ((HA_1_1 < HA_2_1)) { HA_Trend_1 = "DOWN"; x = 456; color_indic = Lime; UP_41 = 0; DOWN_41 = 1; }

//...

Я знаю, что значения сдвига неортодоксальны, но именно так это сделал оригинальный автор.

int start()

{

//...

// Расчет сдвига для индикаторов (только для тестов)

double shift_1, shift_5, shift_15, shift_30, shift_60, shift_240, shift_1440, shift_10080;

if( test == true )

{

shift_1=iBarShift(NULL,PERIOD_M1,look_time_shift,false);

shift_5=iBarShift(NULL,PERIOD_M5,look_time_shift,false);

shift_15=iBarShift(NULL,PERIOD_M15,look_time_shift,false);

shift_30=iBarShift(NULL,PERIOD_M30,look_time_shift,false);

shift_60=iBarShift(NULL,PERIOD_H1,look_time_shift,false);

shift_240=iBarShift(NULL,PERIOD_H4,look_time_shift,false);

shift_1440=iBarShift(NULL,PERIOD_D1,look_time_shift,false);

shift_10080=iBarShift(NULL,PERIOD_W1,look_time_shift,false);

}

else

{

shift_1=shift_indicators;

shift_5=shift_indicators;

shift_15=shift_indicators;

shift_30=shift_indicators;

shift_60=shift_indicators;

shift_240=shift_indicators;

shift_1440=shift_indicators;

shift_10080=shift_indicators;

Спасибо...

 

Обновленные версии

Я переставил все так, как это должно быть визуально, и изменил некоторые имена параметров. Все по-прежнему выглядит правильно для iCustom, но значение PerkyAsctrend рассчитывается неправильно, и логика Heiken, по-видимому, совершенно неверна. Похоже, что для индикатора Heiken MTF индикатор iCustom не выдает двойное значение. Я еще не проверял их снова, но оба двойных значения iCustom для индикаторов были равны количеству баров в моей истории (2147483647)...! Должно быть, я делаю что-то совершенно неправильное с iCustom, но я не могу найти это.

Если у вас есть время или энергия, чтобы посмотреть на это, я буду очень признателен.

Файлы:
 

To: Homicida & Ra457 по поводу iCustom

Привет.

То большое числовое значение, которое вы получаете при использовании iCustom, похоже на проблему, с которой я столкнулся.

Надеюсь, это поможет.

Убедитесь, что параметры, которые вы вводите в iCustom, точно такие же и в том же порядке, что и внешние переменные в коде индикатора.

Будьте здоровы.

 

2147483647 не имеет никакого отношения к вашей истории.

Это самое большое значение, которое может иметь знаковое 32-битное целое число и используется MT4 в качестве "Пустого значения" индикаторов по умолчанию.

Индикаторы возвращают "Empty Value", когда значение не должно быть показано.

 

iCustom()

Здравствуйте, мне нужно считать три переменные из индикатора.

Я поместил подшивку в верхней части индикатора:

Переменные

double eaBid=0;

double eaAsk=0;

string eaType="";

//==========================

Переменные

#property indicator_separate_window

#property indicator_buffers 8

#property indicator_color1 Black

#property indicator_color2 Lime

#property indicator_color3 Lime

#property indicator_color4 Yellow

#property indicator_color5 Красный

#property indicator_color6 Red

#property indicator_color7 Черный

#свойство индикатора_цвет8 Черный

double eaEP=0;

double eaSL=0;

double eaType=0;

double iVars[];

Вещи

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_color2 ForestGreen

//---- входные параметры

string IndicatorName="TradeWatch";

double EntryBid=0;

double EntryAsk=0;

string EntryType="";

double eaBid=0;

double eaAsk=0;

string eaType="";

int init()

{

return (0);

}

Старт

{

EntryBid = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 1, 0);

EntryAsk = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 2, 0);

EntryType = iCustom(Symbol(), Period(), IndicatorName, eaBid, eaAsk, eaType, 3, 0);

}

Как мне считать эти три переменные в мой советник?

Я не могу понять, где я ошибаюсь?

Спасибо.

 

Почему бы вам просто не считать результаты переменных, которые должны отражаться в значениях буферов индикатора? Если вы посмотрите на цвета в настройках индикатора после того, как вы поместите индикатор на график, каждый цвет представляет собой буфер. Верхний цвет = буфер0, второй сверху цвет = буфер1 и так далее.

Используйте что-то вроде этого в своем советнике:

Buff0=iCustom(NULL,0, "Indicator Name",0,0); //Верхний цвет индикатора

Buff0=iCustom(NULL,0, "Indicator Name",0,1); //1-Back

Buff1=iCustom(NULL,0, "Indicator Name",1,0); //Следующий за верхним цвет индикатора

Buff1=iCustom(NULL,0, "Indicator Name",1,1); //1-Back

Измените переменные в самом индикаторе и перекомпилируйте индикатор, который обновит буферы и индикатор на графике!

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

Дэйв

<<<

 

iCustom()

Спасибо, Дэйв.

Заработало.

 

хорошего дня всем

 

мой советник

Я создал свой советник - ASCTrend.mq4 с помощью MQ4 builder, который использует сигнал asctrend с функцией ICustom. он может открыть сделку BUY при сигнале UP, и SELL при DOWN.

Я хочу добавить к моему советнику некоторый фильтр - при бэктестинге на некоторых парах, он выглядит хорошо для фильтра с BBands ind, но я не знаю, как добавить этот фильтр в мой советник - что-то вроде этого я думаю, но не повезло.

double Buy1_1 = iCustom(Symbol(),0, "PerkyAsctrend1",0,1);

double Buy2_1 = iCustom(NULL, 0, "BBands_Stop_v1", 4, 0, Current + 1);

double Buy2_2 = 1;

double Sell1_1 = iCustom(Symbol(),0, "PerkyAsctrend1",1,1);

double Sell2_1 = iCustom(NULL, 0, "BBands_Stop_v1", 5, 0, Current + 1);

double Sell2_2 = 1;

if (Buy1_1 && Buy2_1 > Buy2_2) Order = SIGNAL_BUY;

if (Sell1_1 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;

Файлы:
Причина обращения: