Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#1926


FoxMongoose "крайние" это 2 последних? ну а между 1-ым и 2-ым числом разность какая? или они одинаковые?
если да, то это последовательность Фибоначчи. Можно реализовать и без массива.
Опишите чётко, чтоб вопросов не возникало, можно и с примером расчёта.


Нет, крайние это первый и последний элемент.
Вот на примере рулетки:
Возьмем последовательность из 2 чисел: [5;5]
То есть первая ставка 10
Проигрыш - добавляем к последовательности сумму ставки [5;5;10], складываем крайние числа, следующая ставка 15
Проигрыш - [5;5;10;15], следующая ставка 20
Выигрыш - [5;10], вычеркнули крайние числа, следующая ставка 15
Выигрыш - весь ряд вычеркнут, наша прибыль 10 у.е., то есть сумма изначального ряда [5;5]
#1927

Давайте лучше на примере торговли валютой:
начинаем с 1-го ордера с начальным лотом 0,1 - лосс
наступили условия для открытия 2-го ордера. Лот № 2 - ? считаем тоже 0,1 - лосс
№3 лот 0,2 -лосс
№4 лот 0,3 -лосс
№5 лот 0,4 -профит
№6 лот 0,4 -профит
№7 лот 0,5 -лосс
№8 лот 0,7 - и т.д.

правильно?

#1928


Давайте лучше на примере торговли валютой:
начинаем с 1-го ордера с начальным лотом 0,1 - лосс
наступили условия для открытия 2-го ордера. Лот № 2 - ? считаем тоже 0,1 - лосс
№3 лот 0,2 -лосс
№4 лот 0,3 -лосс
№5 лот 0,4 -профит
№6 лот 0,4 -профит
№7 лот 0,5 -лосс
№8 лот 0,7 - и т.д.

правильно?


Так, но всегда должен быть начальный ряд, хотя-бы из одного лота, в вашем примере по окончанию серии будет лишь безубыток. По вашему примеру будет так:
№1 лот 0.1, [0.1]
№2 лот 0.2, [0.1;0.1]
№3 лот 0.3, [0.1;0.1;0.2]
№4 лот 0.4, [0.1;0.1;0.2;0.3]
№5 лот 0,5, [0.1;0.1;0.2;0.3;0,4]
№6 лот 0,4 [0.1;0.2;0.3]
№7 лот 0,2 [0.2]
№8 лот 0.4 [0.2;0.2]
#1929

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

#1930


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


Начинать с начального лота нужно, когда все числа в массиве закончатся (вычеркнутся).
А вот про сохранение я не подумал. И к таким подвигам еще не готов, я только начал переходить от Паскаля к MQL :d
#1931



Rever27 функция инит отрабатывает 1 раз при запуске совы. если Вы хотите пересчитывать лот, то нужно расчёт лота делать непосредственно перед вызовом ОрдерСенд.



Поставил перед OrderSend - ничего не изменилось. Мм не меняется в зависимости от депозита.
воткнул в OrderSend - Мм заработал, но построение сетки у мартина слетело.
Возможно, авто мм не работает только в тесте, на реале будет иначе, буду разбираться.


0ll, почти неделю разбирался. Все таки родил решение #:-s Спасибо.
Проблема была в том, что код советника, начиная с OrderSend(... был под Void, а мой АвтоММ под int start.
По сути, советник работал и так, но смена лота происходила бы только при смене таймфрейма пары, либо перезагрузки терминала.
Перенеся же код с OrderSend(... под шапку start - тестер сразу стал менять лот. Профит )
Хотя, мне показалось, что теперь тест стал немного медленнее идти.

Теперь вплотную займусь изучением вашего кода по торговле только двумя парами :)
#1932

помогите получить адекватные данные от стрелочного индикатора HMA Arrows. Пробовал iCustom, но при тестировании получались расхождения между стрелками и открытием сделок и это расхождение не 1-2 свечи, а входы были там где не было сигнала и быть е должно.

HMA+Indicator.rar9 скач.

#1933
SpyRF индюк HMA Arrows берёт данные от своего цветного брата и ищет локальный экстремум из 3 баров (типа: 31) и результат (стрелочка) будет только на 1 баре.
Что касается HMA Color, то есть подозрение, что рисует. Лучше запустите в визуальном режиме любого эксперта и накиньте на график индюки и наблюдайте возможные изменения на закрытых барах.
В самом HMA Arrows только 2 буфера и других данных (более адекватных) там нет...
#1934


SpyRF индюк HMA Arrows берёт данные от своего цветного брата и ищет локальный экстремум из 3 баров (типа: 31) и результат (стрелочка) будет только на 1 баре.
Что касается HMA Color, то есть подозрение, что рисует. Лучше запустите в визуальном режиме любого эксперта и накиньте на график индюки и наблюдайте возможные изменения на закрытых барах.
В самом HMA Arrows только 2 буфера и других данных (более адекватных) там нет...


Вы бесспорно правы, что написали насчет HMA Arrows, но я не могу никак советник заставить работать также как и индюк. Стрелочки у индюка иногда перерисовываются, например, если было сильное движение в противоположную от стрелочки сторону, но с этим можно жить при определенных условиях, HMA color сильно уж не перерисовывается, в частности, как и любая машка он следует за ценой и изменение его касается ближайших свечей. Я раньше торговал с этими индюками, потом переключился на дневки, потому что новая работа не позволяет сидеть на Форексе днем, вот поэтому хочу свою стратегию автоматизировать, хз получится или нет, потому что никакой робот не заменит того, что видит человек, но попытать счастья все-таки хочется. А вот как заставить советник видеть "глазами индикатора" не пойму (

Изменено 19 февраля, 2015 пользователем SpyRF

#1935

Правильно ли я использую расчет тейка и стопа от ATR?

OrderSend(Symbol(),OP_BUY,Lots(),Ask,30,Ask-(ATR*10000*20)*Point,Ask+(ATR*10000*70)*Point,"",MAGIC,0,Blue);
#1936
FoxMongoose в общем - да, но это лишнее: *10000...*Point, т.к. Point = 0.00001. Просто Ask +- N*ATR.
#1937

Подскажите кто знает как прописать функцию чтобы после закрытия сделки советник ждал нового сигнала а не открывал повторно при оставшемся условии писал по индикатору масд я так понимаю что как то можно привязать к бару ?? Спасибо всем!!!

#1938
77павел можно по разному... Например если у Вас условие на вход: Бид Слозе[1]>0 && Слозе[0]
#1939

Спасибо #:-s неделю мучаюсь))))


Добавлено: 23-02-2015 12:31:02

if(Ask> maprice &&Macd1>0 && Close [1]>0&&Close [0]
Добавлено: 23-02-2015 12:39:14

maprice = iMA (Symbol(),0 ,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
Macd1 =iMACD(NULL,TPeriod1,InpFastEMA,InpSlowEMA,InpSignalSMA,PRICE_CLOSE,MODE_MAIN,0);
Macd2 =iMACD(NULL,TPeriod1,InpFastEMA,InpSlowEMA,InpSignalSMA,PRICE_CLOSE,MODE_MAIN,1);
Macd3=iMACD(NULL,TPeriod1,InpFastEMA,InpSlowEMA,InpSignalSMA,PRICE_CLOSE,MODE_SIGNAL,2);

Snox1 = (iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_MAIN,0)> iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_SIGNAL,0)>80);
Snox2 = (iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_SIGNAL,0)>iStochastic(NULL,TPeriod,5,3,3,MODE_SMA,0,MODE_MAIN,0) // второй экран - стохастика

if( Bid maprice&&Close [0] {

Добавлено: 23-02-2015 12:44:01

это на лонг и на шорт пак путано конечно

Изменено 23 февраля, 2015 пользователем 77павел

#1940

может быть кто-нито поможет?

#1941
77павел чего-то Вы много условий написали. Вроде речь была про макд, поэтому условие:
(Macd2 0) - вставляйте это в свою формулу, только не прописывайте сразу 2 пересечения (макд и МА) - сделок может не быть.
#1942

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

Помогите решить маленькую задачу :

Хотел бы изменить настройки в индикаторе "ZigZag Pointer Alert", а именно заменить "стрелочки", на "кружочки",например такие,как в индикаторе "123PatternsV6".Исключительно для "красоты глаз"

Думаю,там где-то надо заменить "стрелка" на "круг",но увы не могу понять где,буду рад помощи,спасибо!

Фото и индикаторы прикрепил :d

1.jpg
2.jpg
In.rar9 скач.

#1943

Весь секрет здесь:
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,108);
Поменяй код 108 на код из другого индюка, или любой другой и будет индюк рисовать не стрелочки, а кружочки или что-угодно...

#1944

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

Screen


На графике установлены модифицированные MA с зависимостью периода от таймфрейма т. е. 18 периодов для Н1 превратится в 18*60 периодов на M1. На основе их данных я пишу осциллятор. Поскольку каждый таймфрейм имеет свою МА, которую видно на более младшем таймфрейме, то в целях оптимизации расчётов я хочу отказаться от вызова iCustom в коде осциллятора. Вместо iCustom каждая МА создаст для себя глобальную переменную и будет писать в неё готовое значение, а осциллятору останется считывать эти значения, делать дальнейшие расчёты и рисовать линии в своём окне.

Вопрос первый: Будет ли такая конструкция работать быстрее, чем вызов iCustom с параметрами уже установленного на графике индикатора?
Вопрос второй: Есть ли смысл добавить запись в файл для ранее рассчитанных значений с целью исключения повторных расчётов при смене таймфрейма?
#1945


Вопрос первый: Будет ли такая конструкция работать быстрее, чем вызов iCustom с параметрами уже установленного на графике индикатора?
Вопрос второй: Есть ли смысл добавить запись в файл для ранее рассчитанных значений с целью исключения повторных расчётов при смене таймфрейма?


1. Конечно быстрее. и для оперативы легче.
2. При смене ТФ происходит переинициализация и все значения утрачиваются. Если не хотите пересчитывать есть 3 способа: через файл, глобальные переменные, графические объекты.
Пересчитывать всё на самом деле можно за один проход на глубину самой длинной машки - секунда.
#1946


Весь секрет здесь:
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,108);
Поменяй код 108 на код из другого индюка, или любой другой и будет индюк рисовать не стрелочки, а кружочки или что-угодно...



Спасибо больше,все получилось!
#1947

Друзья, подскажите почему функция не хочет работать? Переменная buyclose, прописывается во внешних переменных и ей присваивается цена по которой я бы хотел закрыть все позиции (например buyclose = 1.5649). Остальные функции работают хорошо, компилируется без ошибок...
if (CountTrades() > 0)
{
if (Bid >= NormalizeDouble(buyclose, Digits))
{
int count = 0;

for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic2 && OrderMagicNumber() == Magic)
{
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage);
}
}
}
}
}

#1948
master.man, после выбора ордера, строчка должна выглядеть так:

if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Magic2 || OrderMagicNumber() == Magic)).
#1949

Спасибо chistaya-rodina, возможно из-за этого... буду пробовать т.к. этот бот обкатывается только в реальном времени, потому что первый ордер открывается вручную

#1950
master.man, если больше ошибок нет, то должно работать. По прежней записи выходило, что выбранный ордер, должен иметь одновременно оба мейджика, а теперь, либо-первый, либо-второй.

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

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