Журналы про форекс читал и увидел этот метод, если интересно http://www.lepreconreview.com/arhiv-jyrnala/year/2010/page/2 вот ссылка 4-й выпуск страница 67. Там описывался советник на на основе этого трала. Что значит восклицательный знак в этой выражении -!OrderModify()????
Журналы про форекс читал и увидел этот метод, если интересно http://www.lepreconreview.com/arhiv-jyrnala/year/2010/page/2 вот ссылка 4-й выпуск страница 67. Там описывался советник на на основе этого трала. Что значит восклицательный знак в этой выражении -!OrderModify()????
ИСТИНА(1), если значение операнда ЛОЖЬ(0), и ЛОЖЬ(0), если значение операнда не
ЛОЖЬ(0).
Учите учебник и документацию. Нет желания - идите прямиком в раздел работа - там делают код по Вашему ТЗ за приемлемые средства.
Я понимаю что это логическая операция НЕ. Я не понимаю как это НЕ модифицировать ордер. В ф-ии TrailingByShadows перед каждым OrderModify() стоит восклицательный знак.
Fantar:
Я понимаю что это логическая операция НЕ. Я не понимаю как это НЕ модифицировать ордер. В ф-ии TrailingByShadows перед каждым OrderModify() стоит восклицательный знак.
Условие, упоминаемое Вами, скорее выглядит так:
if (!OrderModify ())
{
//какое-то действие (скорее всего Print())
}
Это означает, что если функция OrderModify() вернула значение false, то...
Чтобы работал упоминаемый библиотечный трал, нужно добавить к коду:
externint Trail_TF = 0; // таймфрейм трейлингаexternbool TrailLOSS_ON = FALSE; // Включение трейлинга на LOSS`eexternint BarsToShadows = 0; // Количество баров, по теням которых необходимо трейлинговать (от 1 и больше)externint Indent_Sh = 0; // Отступ (пп.) - расстояние от макс\мин свечи, на которое переносится SL (от 0)#import "TrailingByShadows.ex4"void TrailingByShadows (int ticket, int tmfrm, int bars_n, int indent, bool trlinloss);
#importint start()
{
//---- Вставить этот код (в любое место)for (i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS)) continue;
if (OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() != Symbol()) continue;
TrailingByShadows (OrderTicket(), Trail_TF, BarsToShadows, Indent_Sh, TrailLOSS_ON);
}
}
а сам файл библиотеки TrailingByShadows.mq4 должен лежать в папке terminal\experts\libraries.
Я нашёл но не пойму куда надо что вставлять, мне надо вставить вот этот трал.
Ещё один вариант подключения упомянутого трейлинга - сделать подключаемую *.mgh библиотеку. Например, так:
//+------------------------------------------------------------------+//| TrailingByShadows.mqh |//| I_D |//| http://www.mymmk.com/ |//+------------------------------------------------------------------+#property copyright "I_D"#property link "http://www.mymmk.com/"externint iTmfrm 0; // период, по барам которого следует тралить (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)externint iBars_n = 3; // кол-во баров, по которым следует тралитьexternint iIndent = 3; // отступ от тени бара, на котором размещается стоплоссexternbool bTrlinloss = false; // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)//+------------------------------------------------------------------+//| ТРЕЙЛИНГ ПО ТЕНЯМ N СВЕЧЕЙ |//| При запуске эксперта ему необходимо указать уникальный номер |//| (тикет) открытой позиции, а также определить параметры трейлинга:|//| количество баров, по теням которых необходимо трейлинговать |//| (от 1 и больше) и отступ (пунктов) - расстояние от макс. (мин.) |//| свечи, на которое переносится стоплосс (от 0), переключатель |//| trlinloss указывает, следует ли трейлинговать на участке |//| "стоплосс-курс открытия позиции. |//+------------------------------------------------------------------+void TrailingByShadows (int ticket, int tmfrm, int bars_n, int indent, bool trlinloss)
{
int i; // counterdouble new_extremum;
// проверяем переданные значенияif ((bars_n<1) || (indent<0) || (ticket==0) || ((tmfrm!=0) && (tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
{
Print("Трейлинг функцией TrailingByShadows() невозможен из-за некорректности значений переданных ей аргументов.");
return(0);
}
// если длинная позиция (OP_BUY), находим минимум bars_n свечейif (OrderType()==OP_BUY)
{
for(i=1;i<=bars_n;i++)
{
if (i==1) new_extremum = iLow(Symbol(),tmfrm,i);
elseif (new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum = iLow(Symbol(),tmfrm,i);
}
// если тралим и в зоне убытковif (trlinloss==true)
{
// если найденное значение "лучше" текущего стоплосса позиции, переносим if ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum - indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
}
else
{
// если новый стоплосс не только лучше предыдущего, но и курса открытия позицииif ((((new_extremum - indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum - indent*Point)>OrderOpenPrice()) && (new_extremum - indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
// если короткая позиция (OP_SELL), находим минимум bars_n свечейif (OrderType()==OP_SELL)
{
for(i=1;i<=bars_n;i++)
{
if (i==1) new_extremum = iHigh(Symbol(),tmfrm,i);
elseif (new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum = iHigh(Symbol(),tmfrm,i);
}
// если тралим и в зоне убытковif (trlinloss==true)
{
// если найденное значение "лучше" текущего стоплосса позиции, переносим if ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
}
else
{
// если новый стоплосс не только лучше предыдущего, но и курса открытия позицииif ((((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
if (!OrderModify(ticket,OrderOpenPrice(),new_extremum + (indent + MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
}
}
}
//+------------------------------------------------------------------+
Обратите внимание на расширение библиотеки: TrailingByShadows.mqh. Её не нужно компилировать и лежать она должна в другом месте: terminal\experts\include
В коде нужно прописать её вызов:
#include <TrailingByShadows.mqh>
И в start() добавть только:
int start()
{
//---- Вставить этот код (в любое место)for (i = OrdersTotal() - 1; i >= 0; i--)
{
if (!OrderSelect (i, SELECT_BY_POS) continue;
if (!OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() != Symbol()) continue;
TrailingByShadows (OrderTicket(), iTmfrm, iBars_n, iIndent, bTrlinloss);
}
}
Народ почему этот метод трала не работает?
Народ почему этот метод трала не работает?
Откуда Вы взяли его?
Народ почему этот метод трала не работает?
OrderSelect(i,SELECT_BY_TICKET)i - это не ТИКЕТОткуда Вы взяли его?
Журналы про форекс читал и увидел этот метод, если интересно http://www.lepreconreview.com/arhiv-jyrnala/year/2010/page/2 вот ссылка 4-й выпуск страница 67. Там описывался советник на на основе этого трала. Что значит восклицательный знак в этой выражении -!OrderModify()????
Вот второй вариант от куда брал - https://docs.mql4.com/ru/trading/ordermodify
Сейчас код переделал, вроде работает. Можно чтоб на графике во время тестирования отображались тралинговые позиции?
Журналы про форекс читал и увидел этот метод, если интересно http://www.lepreconreview.com/arhiv-jyrnala/year/2010/page/2 вот ссылка 4-й выпуск страница 67. Там описывался советник на на основе этого трала. Что значит восклицательный знак в этой выражении -!OrderModify()????
Вот второй вариант от куда брал - https://docs.mql4.com/ru/trading/ordermodify
1. Разберите по шагам трал учебника, многое прояснится.
В прицепе - библиотека тралов от Ю.Дзюбан - разбирайте код, ставьте нужные, пробуйте, добавляйте свои варианты. Заново велосипед изобретать не надо.
Сам её пользую на реале - всё работает исправно. Взял ф-ии из этой библиотеки и их юзаю. Полностью эту библу не подключал. Юзаю отдельные ф-ии из неё.
2. !OrderModify()???? -ответ.
Учите учебник и документацию. Нет желания - идите прямиком в раздел работа - там делают код по Вашему ТЗ за приемлемые средства.
2. !OrderModify()???? -ответ.
Учите учебник и документацию. Нет желания - идите прямиком в раздел работа - там делают код по Вашему ТЗ за приемлемые средства.
Я понимаю что это логическая операция НЕ. Я не понимаю как это НЕ модифицировать ордер. В ф-ии TrailingByShadows перед каждым OrderModify() стоит восклицательный знак.
Условие, упоминаемое Вами, скорее выглядит так:
Это означает, что если функция OrderModify() вернула значение false, то...
Народ почему этот метод трала не работает?
Чтобы работал упоминаемый библиотечный трал, нужно добавить к коду:
а сам файл библиотеки TrailingByShadows.mq4 должен лежать в папке terminal\experts\libraries.Я нашёл но не пойму куда надо что вставлять, мне надо вставить вот этот трал.
Ещё один вариант подключения упомянутого трейлинга - сделать подключаемую *.mgh библиотеку. Например, так:
Обратите внимание на расширение библиотеки: TrailingByShadows.mqh. Её не нужно компилировать и лежать она должна в другом месте: terminal\experts\include
В коде нужно прописать её вызов:
#include <TrailingByShadows.mqh>И в start() добавть только:
Добрый день, если советник проверяет условия стратегии и открывает ордер на первом тике (начале) бара:
static int bar;
if(Time[0]==bar) return;
bar=Time[0];
то
1) Всегда ли будет успевать открывать (проверять условия) ордер, или первый тик недостаточен ?
2) Если недостаточен и пропускается много сделок, то как можно грамотно расширить диапазон, напр. до 3-х первых тиков?
Спасибо за внимание!