Лажа с тестированием экспертов в MT

 
Лажа с тестированием экспертов в MT
Hi, народ. Подскажите, pls., кто знает.
Если при тестировании экспертов в MT использовать уровень Stop Loss (например, пунктов 20), то возникает следующая ситуация: сразу же после закрытия позиции по Stop Loss в том же направлении открывается следующая позиция (которая так же закрывается по Stop Loss, и так до тех пор, пока текущий тренд не изменит свое направление).

Например: если без выставления Stop Loss позиция приносит 60 пунктов убытка, то с использованием Stop Loss, за тот же период в место одной будет открыто 60 / 20 = 3 позиции с общим убытком в тех же 60 пунктов.

Т. е. стопы, фактически, ничего не ограничивают. И происходит это с любыми экспертами, в которых эти стопы применяются, независимо от технологии построения. Так же следует отметить, что данная проблема имеет место быть только при тестировании, а при торговле на демо-счете в режиме real-time такой фигни нет (там стопы выполняются, как положено). Соответственно, результаты тестирования и “реальной” торговли различаются весьма и весьма значительно.

Подскажите кто-нить в чем тут фикус-пикус и как с этим бороться? В тестировании проблема или я что-то не так делаю?

Заранее благодарен всем ответившим.
 
используйте LastTradeTime и CurTime
Для того чтобы избавиться от частых срабатываний эксперта, используйте LastTradeTime и CurTime.
Например:

// выйти, если прошло менее 60 секунд после последней сделки
if (CurTime-LastTradeTime)<60 then exit;

 
Да делал я это уже... Не помогает :(
Дело не в том, что эксперт часто срабатывает, а в том что сигналы эти ложные - их, на самом деле, нет. При работе real-time - все замечательно, а тестер множит позиции, которые в реале бы не исполнились...
 
Лучше забудь про них...
Написание экспертов в метарейдере- сплошная трата нервов и здоровья :( Я долго пытался с ними бороться. И глюки были еще веселее чем описаные тобой. В общем плюнул я на это дело и поставил Метасток...пока доволен.
 
Все зависит от радиуса кривизны рук
У меня, скажем, эксперты работают просто отлично. Второй месяц довольствуюсь стабильным 17% доходом при полном автомате в торговле.

Евгений: условия входа просмотрите. Однозначно, они у Вас некорректные. И, все же, используйте совет разработчиков.
 
Да использую я совет разработчиков... Все равно лажа :(
У меня это условие в каждом эксперте стоит. Причина тут явно не в этом...
 
Текст эксперта
Думаю, если Вы пришлете текст эксперта, я Вам сразу скаже причину.

Можете по эл. почте: dmitri.belyakov@alusavots.lv

А можете прямо сюда.
 
Вот текст
Вот текст эксперта. Типичный MACD Sample, но суть не даже не в этом. Я ж говорю: подобная ситуация у меня возникает с любым экспертом с которым я использую StopLoss.


/*[[
Name := macd
Author := Copyright © 2002, Company
Link := http://www.company.com/
Notes :=
Update on every tick := No
Enable Alerts := No
Disable alert once hit := No
Lots := 1
Stop Loss := 20
Take Profit := 1000
Trailing Stop := 0
]]*/

defines: MACDOpenLevel(3),MACDCloseLevel(2);
var: MacdCurrent(1),MacdPrevious(2),SignalCurrent(1),SignalPrevious(2);
var: cnt(0);

If Bars<200 or TakeProfit<10 then Exit;

MacdCurrent=iMACD(12,26,9,MODE_MAIN,1);
MacdPrevious=iMACD(12,26,9,MODE_MAIN,2);
SignalCurrent=iMACD(12,26,9,MODE_SIGNAL,1);
SignalPrevious=iMACD(12,26,9,MODE_SIGNAL,2);

If TotalTrades<1 then
{
If FreeMargin<1000 then Exit;
If((CurTime-LastTradeTime)<300) then Exit;

If MacdCurrent<0 and MacdCurrent>SignalCurrent and
MacdPrevious<SignalPrevious and Abs(MacdCurrent)>(MACDOpenLevel*Point)
then
{
SetOrder(OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,RED); // &#232;&#241;&#239;&#238;&#235;&#237;&#255;&#229;&#236;
Exit;
};

If MacdCurrent>0 and MacdCurrent<SignalCurrent and
MacdPrevious>SignalPrevious and MacdCurrent>(MACDOpenLevel*Point)
then
{
SetOrder(OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,RED); // &#232;&#241;&#239;&#238;&#235;&#237;&#255;&#229;&#236;
Exit;
};
Exit;
};

for cnt=1 to TotalTrades
{
if OrderValue(cnt,VAL_TYPE)<=OP_SELL and
OrderValue(cnt,VAL_SYMBOL)=Symbol then
{
If OrderValue(cnt,VAL_TYPE)=OP_BUY then
{

If MacdCurrent>0 and MacdCurrent<SignalCurrent and
MacdPrevious>SignalPrevious and MacdCurrent>(MACDCloseLevel*Point) then
{
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Bid,3,Violet);
Exit;
};
If TrailingStop>0 then
{
If (Bid-OrderValue(cnt,VAL_OPENPRICE))>(Point*TrailingStop) then
{
If OrderValue(cnt,VAL_STOPLOSS)<(Bid-Point*TrailingStop) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),
Bid-Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};
}
else
{
If MacdCurrent<0 and MacdCurrent>SignalCurrent and
MacdPrevious<SignalPrevious and Abs(MacdCurrent)>(MACDCloseLevel*Point) then
{
CloseOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_LOTS),Ask,3,Violet);
Exit;
};
If TrailingStop>0 then
{
If (OrderValue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop) then
{
If OrderValue(cnt,VAL_STOPLOSS)=0 or
OrderValue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop) then
{
ModifyOrder(OrderValue(cnt,VAL_TICKET),OrderValue(cnt,VAL_OPENPRICE),
Ask+Point*TrailingStop,OrderValue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};
};
};
};
// the end.
 
Все дело в волшебных пузырьках
LastTradeTime хранит время последней опреации в реальности. Поэтому проверка LastTradeTime при тесте эксперта смысла не имеет.

Боюсь ошибиться, но, по-моему, раньше LastTradeTime работал и при проверке эксперта...

А вообще, эксперт работает новрмально. Открывается как и задумано.

Но чистый MACD не рекомендую использовать. Не даст он хороших сигналов.
 
По 7-8 позиций подряд в одном направлении - "эксперт работает нормально"???
Ничего подобного. Такого мною "задумано" небыло.
А чистый MACD я и не использую. Данный эксперт взят чисто для примера. Такая фигня у меня происходит с любым экспертом в котором применяется StopLoss. :((
 
Я вроде бы уже сказал...
что условия входа очень мягкие.

А так - работает он именно так, как запрограммирован. :)