Дмитрий Сорокин: Как я понял это фрагменты кода, которые вставляются в советник. А кто может написать советник? Неужели никто тут это вид трала по АТR не доработал до советника?
Трал не дорабатывается до советника. Трал - ставится в советник для сопровождения позиции.
Всё есть на мкл4 - для пятёрки - незначительные изменения возможно... Там всё элементарно. Всё по азбуке, доке и всё.
Vitalie Postolache: Дорабатывается, если надо. Для ручной торговли, например, имеет смысл советник-тральщик включать, а полноценный советник не всегда нужен.
Не подскажете, кто знает, как сделать, чтобы советники топикстартера смотрели за всеми открытыми ордерами, а не только с указанным тикетом? Насколько понял, они только для сопровождения отдельного ордера.
Автор спасибо за проделанную работу, что даже через 10 лет почти данная тема актуальна:)
Помогите пожалуйста, не получается чтоб включался трал. Я пытаюсь сделать так чтоб SL (при покупке) переносился на Low предыдущего бара. Я так понял мне надо TrailingByShadows.
Вот мой советник. ПОМОГИТЕ пожалуйста я вообще не могу понять что не так(((
externint NumberOfTry = 5; // Количество торговых попыток bool UseSound = True; // Использовать звуковой сигналstring NameFileSound = "expert.wav"; // Наименование звукового файла#property copyright"I_D / Юрий Дзюбан"#property link"http://www.mymmk.com/ Софт для управления капиталом"#property librarystaticdatetime sdtPrevtime = 0;externint Lots=1; //объём торгов externint Target=15; //тейк профитint MagicNumber = 89354658;
string MagicName = "DojiTrader";
int eDirection = 0; //условиеint SigP = 0; //условиеint OpenTime=1;
externint iTicket; // уникальный номер (тикет) открытой позицииexternint iTmfrm; // период, по барам которого следует тралить (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)externint iBars_n = 3; // кол-во баров, по которым следует тралитьexternint iIndent = 3; // отступ от тени бара, на котором размещается стоплоссexternbool bTrlinloss = false; // следует ли тралить на участке лоссов (между курсом стоплосса и открытия)/////////////////////////////////////////////////////////////////////////////////////////////int start()
{
int orders = 0;
int i = 0;
for(i = 0; i < OrdersTotal(); i++ )
{
OrderSelect(i,SELECT_BY_POS);
if( OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
orders ++; //если нет не 1го открытого ордера то разрешается открытие ордера +1break;
}
}
///////////////////////////////////////////////////////////////////////////////////////////// for(i = 1; i < OrdersTotal(); i++ ) //количество открытых ордеров на 1 больше
{
OrderSelect(i,SELECT_BY_POS);
if( OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
{
orders ++;
break;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////// if(orders < 1 )
{
for(i = 1; i < Bars; i++ )
{
//Бычье поглащениеif ((Open[i]>Close[i]) && (High[i+1]>High[i]) && Low[i+1]>Low[i])
{
eDirection = 1;
break;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(i < 4 && i > 0)
{
if(SigP == 0)
{
if(High[i] < Ask)
{
SigP = 1;
}
}
}
else
{
SigP = 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Покупкаdouble res;
if (eDirection==1 && SigP ==1 && iBarShift(NULL,0,OpenTime) != 0)
{
res = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Low[i]-3*Point,High[i]+20*Point ,MagicName,MagicNumber,0,Green);
OpenTime = iTime(NULL,0,0);
}
/////////////////////////////////// ВЫЗОВ ТРАЛАfor (i=0;i<OrdersTotal();i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
if ((OrderType()==OP_BUY) || (OrderType()==OP_SELL))
{
// !!! ПРИМЕР ВЫЗОВА ФУНКЦИЙ ТРЕЙЛИНГА !!!// среди возможных вариантов мы, допустим, выбрали трейлинг по фракталам. Трейлингуем по // 5-барным фракталам на дневках, с отступом от экстремума в 3 п., в зоне лоссов не тралим//TrailingByFractals(OrderTicket(),1440,5,3,false);// (как видим, достаточно предварительно выбрать ордер OrderSelect() и вызвать функцию, // передав ей тикет позиции и определив необходимые параметры).// При желании Вы можете закоментировать данный вид трейлинга и подключить любой другой // или даже "сконструировать" из них более или менее сложную конструкцию.
TrailingByShadows(OrderTicket(),iTmfrm,iBars_n,iIndent,bTrlinloss);
//TrailingRatchetB(OrderTicket(),10,25,30,10,25,30,false);//TrailingStairs(OrderTicket(),50,10); //TrailingByATR(OrderTicket(),1440,5,1,20,1,1,false); // и т.д.
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
}
/////////////////////////////// ВСЁ ЧТО НИЖЕ ДЛЯ ТРАЛА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!=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());
}
}
}
Как я понял это фрагменты кода, которые вставляются в советник. А кто может написать советник? Неужели никто тут это вид трала по АТR не доработал до советника?
Трал не дорабатывается до советника. Трал - ставится в советник для сопровождения позиции.
Всё есть на мкл4 - для пятёрки - незначительные изменения возможно... Там всё элементарно. Всё по азбуке, доке и всё.
Трал не дорабатывается до советника. Трал - ставится в советник для сопровождения позиции.
Всё есть на мкл4 - для пятёрки - незначительные изменения возможно... Там всё элементарно. Всё по азбуке, доке и всё.
Дорабатывается, если надо. Для ручной торговли, например, имеет смысл советник-тральщик включать, а полноценный советник не всегда нужен.
понятно. Как то упустил этот вариант.....
понятно. Как то упустил этот вариант.....
Как один из вариантов сделанный Vitalie Postolache (смотри выше)
:-)
Ок.
Нужен именно такой советник. Для трала по ATR.
Чтобы только тралил.
Всем добрый день.
Не подскажете, кто знает, как сделать, чтобы советники топикстартера смотрели за всеми открытыми ордерами, а не только с указанным тикетом? Насколько понял, они только для сопровождения отдельного ордера.
Автор спасибо за проделанную работу, что даже через 10 лет почти данная тема актуальна:)
Помогите пожалуйста, не получается чтоб включался трал. Я пытаюсь сделать так чтоб SL (при покупке) переносился на Low предыдущего бара. Я так понял мне надо TrailingByShadows.
Вот мой советник. ПОМОГИТЕ пожалуйста я вообще не могу понять что не так(((