Как кодировать? - страница 15

 

Требуется кодер!

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

Советник :

LWMA - 5 (закрытие)

SMA - 8 (закрытие)

Покупка - когда обе линии пересекаются, тогда ждем следующего бара и автоматически запускаем триггер. То же самое и для коротких позиций.

Стоплосс - 30

Тейкпрофит - 30

Трейлстоп - 15

Пожалуйста, мне нужна помощь.

Спасибо.

 
Sinar FX:
Всем программистам, мне нужна ваша помощь, чтобы написать или сделать для меня советника для моей торговли. У меня нет никакого опыта в создании советников, поэтому мне нужны вы, ребята.

Советник :

LWMA - 5 (закрытие)

SMA - 8 (закрытие)

Покупка - когда обе линии пересекаются, ждем следующего бара и автоматически запускаем триггер. То же самое и для коротких позиций.

Стоплосс - 30

Тейкпрофит - 30

Трейлстоп - 15

Пожалуйста, мне нужна помощь.

Спасибо.

Какой таймфрейм?

 

Помогите, пожалуйста, разобраться в коде пользовательского индикатора

Здравствуйте. Я новичок в MQL4. Я заметил, что многие пользовательские индикаторы содержат следующие строки для подготовки к циклу подсчета баров:

int counted_bars = IndicatorCounted();

if( counted_bars < 0 ) return(-1);

if( counted_bars > 0 ) counted_bars--;

int limit = Bars - counted_bars;

for(int i=0; i<limit; i++)

Согласно руководству с сайта metatrader.info, counted_bars = IndicatorCounted() при первом запуске индикатора будет считать counted_bars равным 0. "После этого он будет считать общее количество баров на графике минус один". После чего? После первого запуска? Нужно ли запускать индикатор дважды, чтобы он заработал? В справочном руководстве по MQL4 тоже нет ясности: "IndicatorCounted() возвращает количество баров, которое не изменилось после последнего запуска индикатора. В большинстве случаев одинаковый счет значений индекса не требует пересчета. Используется для оптимизации вычислений".

Затем есть Bars, который является " количеством баров на графике". Почему бы просто не использовать следующий цикл подсчета баров:

for(int i=1;i<=Bars;i++)

Я бы понял, если бы кто-нибудь мог объяснить на чистом английском, что именно происходит в цикле

int counted_bars = IndicatorCounted();

if( counted_bars < 0 ) return(-1);

if( counted_bars > 0 ) counted_bars--;

int limit = Bars - counted_bars;

for(int i=0; i<limit; i++)

и в каком направлении считать бары: вперед (от самого старого бара к самому новому) или назад? Спасибо в avdance!

 

Посмотрите, не поможет ли вам эта статья.

https://www.mql5.com/en/articles/1497

удачи.

 

Спасибо, Маджи. Это помогло. Поправьте меня, если я ошибаюсь:

1. IndicatorCounted полезен на графиках, бары которых обновляются в реальном времени. Таким образом, вместо того, чтобы пересчитывать значения индикатора для всех баров при появлении нового бара, вычисляется только значение индикатора для этого нового бара.

2. "Лимит" - это просто количество новых баров, для которых должен быть рассчитан индикатор.

3. Индекс индикатора считает бары в обратном порядке, при этом i=0 означает новый (текущий) бар.

Думаю, мое замешательство было основано на моем предыдущем опыте работы с Wealth-Lab, где код индикатора написан так, что значения индикатора рассчитываются для всех баров, даже если нужно рассчитать только новые бары. Однако Wealth-Lab обладает некоторым встроенным интеллектом, и возможно, что индикаторы автоматически пересчитываются только для новых баров. У меня складывается ощущение, что MQL4 не хочет принимать такие решения за вас и оставляет эти решения за вами, заставляя вас делать дополнительные шаги программирования. Мне это нравится, потому что я всегда ненавижу, когда программа принимает решения за тебя, и эти решения не совпадают с твоими. Моя единственная проблема с MQL4 заключается в том, что я хотел бы иметь лучшую документацию.

 

fiqe,

Я считаю, что ваши предположения верны. Я думаю, что MT4 прав в том, что рассчитывает индикаторы один раз, а ресурсы WL hogs делают это по-другому.

Возможно, я ошибаюсь, и я надеюсь, что другие, более сведущие, поправят нас обоих.

 
 

Ник,

Проверьте свою электронную почту. Я отправил вам пример.

Дайте мне знать.

Maji

 

Хорошо, я думаю, что вы можете сделать это так:

Сначала нужно указать, в какой час вы ищете - если ваш брокер GMT+3, то для подсчета Пивотов по времени GMT нужно уменьшить время брокера на 3. Таким образом, если вы ищете час 00.00, то вы будете искать в 21.00 по времени вашего брокера.

Теперь, один день равен 24 часам, и мы начинаем поиск с правой части экрана. Время вашего брокера равно +3, поэтому мы добавим это число к значению сдвига.

for(int i = 3 ; i <= 27 ; i++)

{

if(TimeHour(Time)==21)

{

//This should be your GMT midnight so u can take OHLC values from here

double open = iOpen(Symbol(),60,i);

double high = iHigh(Symbol(),60,i);

double low = iLow(Symbol(),60,i);

double close = iClose(Symbol(),60,i);

}

}

Я не знаю, простой ли это способ, но он работает.

 

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

В последней версии SimpleDailyRangeBreakoutExpert вы можете найти код для построения свечей (OHLC) для любого часового пояса.