Как видите, написаны функции, выполняющие вполне конкретные действия. А потом эти функции соединяются таким образом, чтобы реализовать нужную тактику работы с позициями.
Пож., Игорь, в двух словах , чуть подробнее опишите ваш функционал. Хочется вникнуть , а вследствие скромных знаний теряю мысль уже с самого начала.
rid писал (а): Пож., Игорь, в двух словах , чуть подробнее опишите ваш функционал. Хочется вникнуть , а вследствие скромных знаний теряю мысль уже с самого начала.
Это был пример, выдернутый из работающего эксперта. Назначение функций:
Функция GetTradeSignal() заполняет массив ms[] торговыми сигналами. В каждом эксперте начинка функции GetTradeSignal(), естественно, своя.
Функция ExistPositions() возвращает флаг наличия позиции.
Функция ClosePositions() закрывает одну или несколько позиций при наличии соответствующего сигнала в массиве ms[]. Перед закрытием проверяется наличие позиции условием if (ExistPositions("", -1, Magic)).
Функция OpenPosition() открывает одну позицию по текущей цене при наличии соответствующего сигнала в массиве ms[]. Позиция может быть открыта только при отсутствии оной.
Тактика:
Если есть позиции и есть сигнал на закрытие, то закрыть позиции.
Если нет позиций и есть сигнал на открытие, то открыть позиции.
Очередная проблема подошла вот. Полистал теор. часть, но выхода пока не нашёл. По ряду причин мне необходимо закрывать в советнике открытые позиции не стопами (стоплосс и тейкпрофит), а функцией . Сделал. Заработало! Однако...
При попытке вставить в эксперт библиотеку расчета лотов (B-lots) обнаружилось, что эксперт стал работать непонятно как! Если без ММ кривая баланса (после оптимизации) уверенно шла вверх с мизерной Просадкой, то после включения ММ - резкий слив! Более того! Даже если убрать из кода библиотеку B-lots, И просто увеличить размер лота с 0.1 до 0.2, то опять идет резкий слив. Даже при увеличении исходного депозита в неск. раз .... Т.е. не в библиотеке и не в размере депозита дело - просадка то, изначально мизерная... . В рынок вхожу вот так:
//---------------ПОКУПАЕМ ------------------------------------------
... ... ...
if(Long){//выключатель вкл if(!ExpertOrder(MagicLong)){//если нет открытых длинных позиций //Lots=GetSizeLot(); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"AТ",MagicLong,0,Blue);
if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);}}}
Здесь все ясно и понятно. Далее закрываю позиции функцией OrderClose(. .. Вот таким образом:
for(intv=0; v<OrdersTotal(); v++){// for ( int v = OrdersTotal() - 1; v >= 0; v -- ){ if(OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==Symbol()){//----------------------------------------------------- if(ExpertOrder(MagicLong)){if(OrderProfit() > tp){OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); return(0);}if(OrderProfit() <= -sl){OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); return(0);}}}}}
При заданном изначально лоте=0.1 конструкция работает нормально! При попытке изменить размер лота (увеличить) или при попытке включть библиотеку ММ - работа нарушается! Не могу разобраться, - почему? Вместо OrderLots() подставлял просто "Lots", но ничего не изменилось. ... Пож., подскажите.?
rid: При заданном изначально лоте=0.1 конструкция работает нормально! При попытке изменить размер лота (увеличить) или при попытке включть библиотеку ММ - работа нарушается! Не могу разобраться, - почему? Вместо OrderLots() подставлял просто "Lots", но ничего не изменилось. ... Пож., подскажите.?
Надо смотреть чем отличаются действия эксперта. Ордера открываются/закрываются в то же время что и раньше?
Нет. При увеличении лота с 0.1 до 0.2-х сделки начинают происходить чаще, более, чем в 2 раза ! При тех же внешних параметрах... Странно. Но вот не поленился! Сделал так:
Убрал закрытие позиций функцией OrderClose и предусмотрел нормальное закрытие по стоплоссу и тейкпрофиту в функции ticket=OrderSend(... ... ...) . В этом случае блок ММ заработал так , как ему и положено! Видно всё дело именно в функции
Результат пока всё тот же! С последним вариантом закрывается только последняя открытая позиция.!
Убрал, как велено. И случилось чудо. Закрываться стали все открытые позиции по сигналу индикатора! Но почему так?
Результат пока всё тот же! С последним вариантом закрывается только последняя открытая позиция.!
Убрал, как велено. И случилось чудо. Закрываться стали все открытые позиции по сигналу индикатора! Но почему так?
Я обычно реализую такой функционал:
Как видите, написаны функции, выполняющие вполне конкретные действия. А потом эти функции соединяются таким образом, чтобы реализовать нужную тактику работы с позициями.Пож., Игорь, в двух словах , чуть подробнее опишите ваш функционал. Хочется вникнуть , а вследствие скромных знаний теряю мысль уже с самого начала.
Это был пример, выдернутый из работающего эксперта. Назначение функций:
Тактика:
Видите, как всё просто? :-)
Всем привет! С наступающим рождеством!
Очередная проблема подошла вот. Полистал теор. часть, но выхода пока не нашёл. По ряду причин мне необходимо закрывать в советнике открытые позиции не стопами (стоплосс и тейкпрофит), а функцией . Сделал. Заработало! Однако...
При попытке вставить в эксперт библиотеку расчета лотов (B-lots) обнаружилось, что эксперт стал работать непонятно как! Если без ММ кривая баланса (после оптимизации) уверенно шла вверх с мизерной Просадкой, то после включения ММ - резкий слив! Более того! Даже если убрать из кода библиотеку B-lots, И просто увеличить размер лота с 0.1 до 0.2, то опять идет резкий слив. Даже при увеличении исходного депозита в неск. раз .... Т.е. не в библиотеке и не в размере депозита дело - просадка то, изначально мизерная... . В рынок вхожу вот так:
Здесь все ясно и понятно. Далее закрываю позиции функцией OrderClose(. .. Вот таким образом:При заданном изначально лоте=0.1 конструкция работает нормально! При попытке изменить размер лота (увеличить) или при попытке включть библиотеку ММ - работа нарушается! Не могу разобраться, - почему? Вместо OrderLots() подставлял просто "Lots", но ничего не изменилось. ... Пож., подскажите.?При заданном изначально лоте=0.1 конструкция работает нормально! При попытке изменить размер лота (увеличить) или при попытке включть библиотеку ММ - работа нарушается! Не могу разобраться, - почему? Вместо OrderLots() подставлял просто "Lots", но ничего не изменилось. ... Пож., подскажите.?
Ордера открываются/закрываются в то же время что и раньше?
Нет. При увеличении лота с 0.1 до 0.2-х сделки начинают происходить чаще, более, чем в 2 раза ! При тех же внешних параметрах... Странно. Но вот не поленился! Сделал так:
Убрал закрытие позиций функцией OrderClose и предусмотрел нормальное закрытие по стоплоссу и тейкпрофиту в функции ticket=OrderSend(... ... ...) . В этом случае блок ММ заработал так , как ему и положено! Видно всё дело именно в функции
Может быть при увеличении лота нужно соответственно изменять значение "tp" ?Ошибка - в коде. Где - не знаю, т.к. даже кода нет. Призываем ясновидцев из соседней ветки ;)