В уроках ведь рассматривали как делать подсчет ордеров.
int CountBuy()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade >= 0; trade --)
{
OrderSelect(trade, SELECT_BY_POS);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
count++;
}
return (count);
}
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Все правильно. Это функция расчета количества уже открытых ордеров.
А надо обнулить переменную количества ордеров ПОСЛЕ закрытия.
Как это сделать -- х.з.
Все правильно. Это функция расчета количества уже открытых ордеров.
А надо обнулить переменную количества ордеров ПОСЛЕ закрытия.
Как это сделать -- х.з.
int count = 0;
Вот это и есть обнуление. Ты сперва присваеваешь 0 потом уже считаешь, если ордера есть, то будет 1, если нет то так и останется 0.
ЦитатаА надо обнулить переменную количества ордеров ПОСЛЕ закрытия.
Дык, переменная обнуляется при каждом вызове функции. Только надо исправить:
наЦитатаint Count = 0;
Цитатаint count = 0;
Спасибо огромное! Заработало!
Да, внимательность в этом деле не на последнем месте.
Еще раз спасибо!!!
Всем привет!
Ребята, у меня возник вопрос: как сделать, что бы советник брал во внимание старшие таймы. Например входит на М15, но тренд по МА смотрит на Н1, Д1 и дальше. Как то так.... буду очень благодарен!
Всем привет!
Ребята, у меня возник вопрос: как сделать, что бы советник брал во внимание старшие таймы. Например входит на М15, но тренд по МА смотрит на Н1, Д1 и дальше. Как то так.... буду очень благодарен!
для МА можно увеличить период во столько на сколько большее высшей тф твоего, т.е. с тф м15 ты хочешь посмотреть ма на h1 с периодом 10, тф h1 больше м15 на 4, нужно период (10) умножить на 4.
Всем привет!
Ребята, у меня возник вопрос: как сделать, что бы советник брал во внимание старшие таймы. Например входит на М15, но тренд по МА смотрит на Н1, Д1 и дальше. Как то так.... буду очень благодарен!
Нужно просто указать функции нужный таймфрейм:
double ma_h1 = iMA(NULL, PERIOD_H1,..);
double ma_d1 = iMA(NULL, PERIOD_D1,..);
Приветствую, а скажите пожалуйста, почему файл MQL4 Source File невозможно декомпильнуть, в чем может быть причина? заранее спасибо.
спасибо за ветку. Очень наглядно все выходит. Хотя предпочитаю сам торговать без советников, но после прочтения ветки загорелся написание своего советника
Приветствую, а скажите пожалуйста, почему файл MQL4 Source File невозможно декомпильнуть, в чем может быть причина? заранее спасибо.
Что значит "MQL4 Source File"? С расширением *.mq4 или *.ex4?
Если это файл *.ex4 , то проблема может быть в новом билде терминала.
Декомпайлер возможно не поддерживает последние билды.
А лучше выложить скрин с ошибкой :)
А вот сам файл,. @-)
Добавлено: 19-07-2013 12:13:37
у кого получилось компильнуть его, поделитесь, просто я в этом деле чайник, мягко говоря :-s
Изменено 19 июля, 2013 пользователем Виктор333
Привет всем. Вот решил испытать свои силы и написать первый советник.
Советник по этой стратегии.
Сам советник вроде получился и работает, только профит примерно равен нулю.
Заметил, что много профитных сделок закрываются раньше времени, и решил прикрутить ступенчатый трейлинг.
При компиляции ошибок нет, но трейлинг не работает.
Помогите разобраться.
P.S. Стратегия изначально рассчитана на золото, но я тестил на евробаксе Н1, т.к. с золотом какие-то заморочки.
Всем привет.
Есть проблема с использованием значений индикаторов в советнике.
И так, нужные мне индикаторы для советника - ExtremeTMALine, TMASlope.v1.5 Normalized, Heiken Ashi.
С первым, вроде как, всё понятно - #property indicator_color2 White - верхняя граница (Индекс линии индикатора - 1)
#property indicator_color3 White - нижняя граница (Индекс линии индикатора - 2)
А вот с остальными двумя что-то непонятное.
TMASlope и Heiken Ashi, по идее, должны выдавать только одно дробное значение на каждый тик, а вот параметров подобных ExtremeTMALine у каждого индикатора несколько.
Если с Heiken Ashi ещё можно поиграться с цветами и кое как вкурить о чем там(чем щас и занят).
То с TMASlope не понятно вообще какой именно индекс линии индикатора надо ставить в iCustom для получения значения TMASlope на каждом тике?
Если вкратце, то помогите определить индексы линий индикатора для TMASlope и Heiken Ashi для получения их значения на каждом тике.
UPD. С TMASlope и Heiken Ashi, вроде как, разобрался, пока на истории показывают правильные результаты, точнее можно будет проверить когда рынок снова затикает(выдрал формулы из ExtremeTMAInfo).
А вот с ExtremeTMALine всё оказалось наоборот, работают с 0 по 3-й индексы линий, но не один из них не соответствует линиям(уровням) которые этот индикатор рисует в окне инструмента. HELP SOMEONE, HELP!
Изменено 21 июля, 2013 пользователем Azirel
Добрый день.
В новом уроке, первый трейлинг не тралит Sell-ордера.
Цитатаif (OrderStopLoss() > Ask + (TrailingStop + TrailingStep)*Point)
Если стопа нет, значит OrderStopLoss() == 0.
xbms, специально так сделал, чтобы думать учились?
Я чуть голову не сломал :)
Вопрос такой. Есть два отдельных советника - один торгует, другой тралит. Если их поставить на одну валютную пару, но в разные окна и передать magic торгующего советника в трал. Будет работать?
Добавлено: 20-07-2013 16:04:32
Еще вопрос. С 3-х и 5-значным брокером понятно. А если в данном инструменте (например, золото) два знака после запятой, как тогда быть? Чтобы все правильно обрабатывалось.
Изменено 20 июля, 2013 пользователем Cerebellum
1. Да.
2. Если советник тралит только символ на который установлен, то на золоте, достаточно выставить адекватные TrailingStop и TrailingStep. Если трал универсальный (тралит все ордера по всем парам), для золота можно вписать проверку
Цитатаif (OrderSymbol() == "XAUUSD")
{
TrailingStop *= x;
TrailingStep *= x;
StopLoss *= x;
Slippage *= x;
}
x - вынести во внешние переменные.
x - вынести во внешние переменные.
И чему равно Х? Я все-таки не понял нужно ли что-то менять, если 2 знака после запятой?
На 3- и 5-знаках умножаем на 10. А если 2 знака?
Золотом не торгую. Теоретически 30 - 100.ЦитатаИ чему равно Х?
Не умножаем.ЦитатаНа 3- и 5-знаках умножаем на 10. А если 2 знака?
Проверка на количество знаков котировок брокера - это вторично. Это сделано для универсальности, если для четырёхзначного SL будет 50 пунктов, то для пятизначного советник автоматически поставит 500. Для себя это можно вообще не писать, ИМХО.
Здесь важно понять, для чего нужна Point (размер пункта текущего инструмента в валюте котировки). Умножая наш SL в 50 пунктов на Point, получаем (4-х знаке) 0,0050 (теперь его можно вычитать из цены, или прибавлять). На золоте мы получим 0,50. Просто для золота 50 пунктов - это, обычно, меньше чем спред, то TrailingStop = 1000, а TrailingStep = 400.
Как-то так ;)
ДЗ Parabolic:
Изменено 21 июля, 2013 пользователем Vorchunozavr
Здравствуйте!
Немного переделал советник по ТМА.
Идея такая: он открывает ордера на границах канала и плюс еще лимитный ордер.
При срабатывании лимитника открывается новый лимитный ордер и т.д.
Закрытие ордеров на противоположных границах.
Вот только работает он как-то криво. Лимитники строчит на каждом тике.
В чем ошибка?
Скрин и советник во вложении.
С уважением.
Здравствуйте!
Немного переделал советник по ТМА.
Идея такая: он открывает ордера на границах канала и плюс еще лимитный ордер.
При срабатывании лимитника открывается новый лимитный ордер и т.д.
Закрытие ордеров на противоположных границах.
Вот только работает он как-то криво. Лимитники строчит на каждом тике.
В чем ошибка?
Скрин и советник во вложении.
С уважением.
Цитатаif(Bid >= PriceHigh && CountSellLimit() == 0)
OT = NormalizeDouble(Bid + Otstup*Point, Digits);
OrderSend(Symbol(), OP_SELLLIMIT, Lots, OT, Slippage, 0, 0, comment, Magic, 0, Red);
нет скобок после if, поэтому условие описанное в этом операторе не ограничивает открытие ордера. на бай таж фигня.
Добавлено: 25-07-2013 04:57:00
Помогите разобраться с вопросом в этом посте:
/ugolok-programmista/13/obuchenie-yazyku-mql4-pod-metatrader-4/4034/?do=findComment&comment=81313
Изменено 25 июля, 2013 пользователем bizforex
Все заработало как надо.
С уважением.
Ребят подскажите как в массивы снять данные файла истории котировок?
Ребят подскажите как в массивы снять данные файла истории котировок?
double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Current bar ",TimeToStr(array1[0][0]),"Open", array1[0][1]);
double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Current bar ",TimeToStr(array1[0][0]),"Open", array1[0][1]);
Не, надо как раз с файла .hst и передать в архив данные лоу, хейдж, макс, мин.... с графика можно забрать, только не в этой ситуации
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем