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

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

#1501

В скрипте есть, вот я и хотел подобный алгоритм задействовать в про трейдер.


Добавлено: 22-10-2014 22:06:45

Я так понимаю вы имеете в виду про файл .ex4? Да его там нет, поэтому я задался поиском решения. скрипт работает хорошо, но не учитывает проскальзывание. в про трейдер это учтено... В итоге при торговле на быстром рынке мой выставленный ордер не открывается по нужной мне цене. Не могли бы вы помочь добавить в скрипт величину проскальзывания?

Изменено 23 октября, 2014 пользователем kist11122111

#1503

СПАСИБО ОГРОМНОЕ \M/. Выручили....


Добавлено: 23-10-2014 15:57:29

Значение проскальзывания для 5 или 4х знака?

Изменено 23 октября, 2014 пользователем kist11122111

#1504


Значение проскальзывания для 5 или 4х знака?


проскальзывание для Вашего брокера. ;) - значение напрямую брокеру передаётся без форматирования.

Изменено 23 октября, 2014 пользователем 0ll

#1505

не подскажите как правильно закрыть ордер по закрытию дневной свечи

#1506


не подскажите как правильно закрыть ордер по закрытию дневной свечи

Я так понял как закрывать ордера Вы знаете - нужно выписать условие на закрытие?
Вот код отслеживающий открытие новой свечи (само закрытие Вы не поймаете или надо ловить 23-55 чтоб своп не получить, но только если по инструменту тики будут):
static datetime ToDay;
if (ToDay {
//Первый тик нового дня
ToDay = iTime(_Symbol, PERIOD_D1, 1);
//Здесь Ваш код закрытия ...

}
#1507

у меня открывает по сигналу дня недели и iOpen[0]
а закрывает тут же в эту секунду
хотя закрытие делаю iClose[0]

#1508


хотя закрытие делаю iClose[0]

Я даже не понял, что Вы делаете... Может код дадите?
#1509


у меня открывает по сигналу дня недели и iOpen[0]
а закрывает тут же в эту секунду
хотя закрытие делаю iClose[0]



Для текущего, нулевого, бара iClose[0] равносильно текущему значению цены, если бар закрылся, то он уже не может быть нулевым, поэтому и происходит сразу закрытие.
#1510



По данной ссылке, представлены информаторы, которые показывают на графике уровень ТП и СЛ с суммой прибыли или убытка.
Я имел ввиду совсем другое.....

Информаторы показывают: лот Х пункты = прибыль
Ваша задача: лот = прибыль / пункты.
Справитесь?


Всем привет!
Что-то не получается решить данную задачу. Нужна помощь. :(
#1511


Что-то не получается решить данную задачу. Нужна помощь. :(

Прости - уже не вспомню. Сформулируй свою задачу заново, может попытку решения - свою реализацию.
#1512

Всем добрый день!
Возник вопросик такой...
Мне нужно закрывать все ордера в первый торговый день нового месяца (или в последний, не суть)
Проблема в том, что выставив условие if (Day() == 1) , мы игнорируем те месяцы, где 1 число выпадает на выходные

Ведь как я понимаю, нельзя написать if (Day()
Как быть? :-?

#1513
oleguitar Есть универсальный алгоритм
static int day_MN;
if (day_MN > Day())
{ //Новый месяц
...
}
day_MN = Day();
#1514



Что-то не получается решить данную задачу. Нужна помощь. :(

Прости - уже не вспомню. Сформулируй свою задачу заново, может попытку решения - свою реализацию.


Всем привет!
Задача следующая: открыт ордер № 1 на покупку с лотом 0,01, цена опустилась ниже на 10 пунктов, необходимо открыть ордер № 2 на покупку с лотом N с условием что ордер № 2 при повышении цены на спред закрыл оба ордера в плюс. Какой должен быть лот ордера № 2? Например: профит по открытым ордерам на покупку составляет -4,59 руб, необходимо открыть еще ордер на покупку с увеличенным лотом, чтобы он за спред перекрыл отрицательный профит =-4,59 руб.

Изменено 25 октября, 2014 пользователем Crik1978

#1515

static int day_MN; // -не совсем понятно, что такое static
if (day_MN > Day()) // - а чему равен day_MN , если эта переменная ничего не содержит?
{ //Новый месяц // - здесь нужно условия ставить ?
...
}
day_MN = Day();
В целом просто не понятно, что делает этот кусок кода, не вижу, можно в двух словах хотя бы?

И еще вопрос.. Столкнулся с проблемой очень медленного тестирования на истории, как ускорить процесс?
Если задавать все переменные в самом начале, еще перед void OnTick(), это поможет?
И какие в целом могут быть причины медленного тестирования?
#1516
Crik1978 Ответ: Лот2 = Лот1 * (ЦЗ - ЦО1) / (ЦО2 - ЦЗ), где ЦЗ - цена предполагаемого закрытия, ЦО - цена открытия. Обычной пропорцией решается. Если ЦЗ = ЦО2 + Спрэд, то в знаменателе остаётся спрэд.

oleguitar
про static - хотите чтоб я вам справочник сюда постил? x( В данном случае это глобальная переменная
day_MN при запуске = 0, а потом содержит пред. день недели
Цитата

здесь нужно условия ставить ?

А я - знаю? в скобках код, отрабатывающий на первом тике нового месяца = что хотите туда пишите.
Цитата

Столкнулся с проблемой очень медленного тестирования на истории, как ускорить процесс?

В любом случае слишком много циклов и на каждом тике, например народ любит на каждом тике ордера пересчитывать, до ещё и по нескольку раз. нужно разделять задачи. Например опрашивать индюки и искать точку входа только по закрытию бара (а не на каждом тике)
Да много чего - целую книгу можно написать об оптимизации кода. перенос переменных ничего не даст

Изменено 25 октября, 2014 пользователем 0ll

#1517

Я не подумал просто, что static - это тип такой) сори ;)
Теперь вроде ясно
А если бы мы объявили обычную int a = -1 , скажем, то, как я понимаю, она на каждом тике все равно принимала бы значение -1 ?

А.. то есть взять тот кусок кода, где я беру с индикаторов показания, можно запускать по разу в начале бара с помощью такой же статичной переменной?
например,

static int newHour;
if (newHour > Hour())
{ // Берем показания индикаторов
...
}
newHour = Hour();

Отсюда вопрос: а что будет, когда newBar будет равен 23, а новый час - 0 ?
можно ли так сделать:
void Ontick()
{
static int newBar;

if (newHour >24)
newBar = 0;
{
if (newBar > Hour())
{ // Берем показания индикаторов
...
}
}
newBar = Hour();



... Условия открытия ордера
}

#1518
oleguitar по int a = -1 на каждом проходе = -1
Не усложняй - всё проще:
static int newHour;
if (newHour != Hour())
{ // Берем показания индикаторов
...
}
newHour = Hour();

Иногда, если мне тики не нужны, делаю так:
static int newHour;
if (newHour == Hour()) return;
newHour = Hour(); //и далее код, исполняемый раз в начале нового часа
#1519

Точно! здорово

Изменено 26 октября, 2014 пользователем oleguitar

#1520

Здравствуйте. Помогите пожалуйста доделать индикатор. Нужно что бы он не стирал предидущие линии, а что бы их можно было просмотреть на истории за N свечей.

cm_ind_Level.mq45 скач.

Изменено 26 октября, 2014 пользователем Strong-Tezis

#1521

спасибо всем решил проблему через тайм серию
еще вопрос может кто подскажет как отключить трал через bool значение
что то не получается
void Trailing()
{
trali=true;
{
for (int i = 0; i {
if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > tralstop * Point)
{
if (OrderStopLoss() {
SL = NormalizeDouble(Bid - tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return(trali);


}
}
}

else if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > tralstop * Point)
{
if (OrderStopLoss() > Ask + (tralstop + tralstep) * Point)
{
SL = NormalizeDouble(Ask + tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return(trali);


}
}
}

}

}
}
}
return;
}

#1522

Видимо опять мне придётся...
Кривоватый индюк, допилил:
- при снятии с графика - убирает за собой
- подрезал тонкие линии, иначе от их обилия свеч не видно.

cm_ind_Level_mod_0ll.mq412 скач.

#1523


еще вопрос может кто подскажет как отключить трал через bool значение

Зачем нам код Вашего трала? - трал выключается в том месте, где идёт вызов:
if (bool) Trailing();
#1524



еще вопрос может кто подскажет как отключить трал через bool значение

Зачем нам код Вашего трала? - трал выключается в том месте, где идёт вызов:
if (bool) Trailing();

спасибо все получилось
#1525


Видимо опять мне придётся...
Кривоватый индюк, допилил:
- при снятии с графика - убирает за собой
- подрезал тонкие линии, иначе от их обилия свеч не видно.



Спасибо за Вашу помощь и отзывчивость. Была идея кое что опробовать, наконец то посмотрю что получится. Еще раз огромное Спасибо.

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

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