Советники: Мультивалютный советник на основе кластерного индикатора (третья версия) - страница 7

 
Потухла веточка
 

Если чуть-чуть подправить вот здесь:

/////////////Заполнение массива данными индикатора CCFp
    for (cnt = 0; cnt < 8; cnt++)
    {
         ccfp[cnt,0] = -1;
         ccfp_old[cnt,0] = -1;
         ccfp[cnt,1] = iCustom (NULL, 0, "CCFp", 1, 0, 3, 5, cnt, bars);
         ccfp[cnt,0] = cnt;
         ccfp_old[cnt,1] = iCustom (NULL, 0, "CCFp", 1, 0, 3, 5, cnt, bars + 1);
         ccfp_old[cnt,0] = cnt;
    }

Добавить маленькую функцию:

int fGetOP (string Sym, string Val)
{
    if (StringFind (Sym, Val) != -1)
    {
        if (StringFind (Sym, Val) == 3)
        {return (1);}
        if (StringFind (Sym, Val) == 0)
        {return (0);}
    }
    else
    {
        if (StringFind (Sym, val[0]) == 3)
        {return (1);}
        if (StringFind (Sym, val[0]) == 0)
        {return (0);}
    }
    return (-1);
}

В init() довнести маленький массивчик:

    Symbol_List[0] = "EURUSD";
    Symbol_List[1] = "EURUSD";
    Symbol_List[2] = "GBPUSD";
    Symbol_List[3] = "USDCHF";
    Symbol_List[4] = "USDJPY";
    Symbol_List[5] = "AUDUSD";
    Symbol_List[6] = "USDCAD";
    Symbol_List[7] = "NZDUSD";

то функция void oper_up (int top, int down, double l, int s, int p, bool cl, bool ops, int mn)
значительно упростится:

 

void oper_up (int top, int down, double l, int i_SL, int i_TP, bool cl, bool ops, int mn)
{
    int li_OP[2], k, no_open, cmd, cnt;
    string comment, cur_Val, ls_Sym[2];
    double ld_price, ld_sl, ld_tp, ld_ask, ld_bid, ld_point, ld_digits;
    color lc_color;
    comment = StringConcatenate ("(", val[top], val[down], ")");
    for (cnt = 0; cnt < 2; cnt++)
    {
        li_OP[cnt] = -1;
        ls_Sym[cnt] = "";
    }
    if (down != top)
    {
        if (top == 0)
        {
            ls_Sym[0] = Symbol_List[top];
            cur_Val = val[down];
        }
        if (top > 0 && top < cnt_SMB)
        {
            if (ccfp[0,1] < ccfp[top,1])
            {ls_Sym[0] = Symbol_List[top];}
            cur_Val = val[top];
            if (down != 0)
            {
                if (ccfp[0,1] > ccfp[down,1])
                {ls_Sym[1] = val[down];}
            }
        }
    }
    if (ls_Sym[0] != "")
    {li_OP[0] = fGetOP (ls_Sym[0], cur_Val);}
    if (ls_Sym[1] != "")
    {li_OP[1] = fGetOP (ls_Sym[1], cur_Val);}
//**************************
    for (cnt = 0; cnt < 2; cnt++)
    {
        // Проверка на наличие открытых ордеров в одном направлении
        for (k = OrdersTotal() - 1; k >= 0; k--)
        {
            OrderSelect (k, SELECT_BY_POS);
            if (OrderSymbol() == ls_Sym[cnt] && OrderType() == li_OP[cnt] && OrderMagicNumber() == mn)
            {ls_Sym[cnt] = "";}
        }
        if (ls_Sym[0] == "" && ls_Sym[1] == "")
        {return (0);}
        //Проверка сигнала на CFP
        if (ls_Sym[cnt] != "" && li_OP[cnt] == BUY && iCustom (ls_Sym[cnt], 0, "CFP", 0, bars) <= iCustom (ls_Sym[cnt], 0, "CFP", 0, bars + 1))
        {Print ("Сигнал по ", ls_Sym[cnt], " ", li_OP[cnt], " не подтвержден!"); ls_Sym[cnt] = "";}
        if (ls_Sym[cnt] != "" && li_OP[cnt] == SELL && iCustom (ls_Sym[cnt], 0, "CFP", 0, bars) >= iCustom (ls_Sym[cnt], 0, "CFP", 0, bars + 1))
        {Print ("Сигнал по ", ls_Sym[cnt], " ", li_OP[cnt], " не подтвержден!"); ls_Sym[cnt] = "";}
        if (ls_Sym[0] == "" && ls_Sym[1] == "")
        {return (0);}
//////////////Закрываем открытые ордера по обратному сигналу (если разрешено)
        if (cl)
        {
            for (k = OrdersTotal() - 1; k >= 0; k--)
            {
                OrderSelect (k, SELECT_BY_POS);
                if (ls_Sym[cnt] != "")
                {
                    if (OrderSymbol() == ls_Sym[cnt] && OrderType() != li_OP[cnt] && OrderMagicNumber() == mn)
                    {
                        lc_color = IIFc (OrderType() == OP_BUY, Green, Magenta);
                        if (OrderType() == OP_BUY)
                        {
                            OrderCloseReliable (OrderTicket(), OrderLots(), MarketInfo (OrderSymbol(), MODE_BID), Slip, lc_color);
                            Print ("Закрываем ", OrderSymbol(), " ", OrderType()," ", comment);
                        }
                        if (OrderType() == OP_SELL)
                        {
                            OrderCloseReliable (OrderTicket(), OrderLots(), MarketInfo (OrderSymbol(), MODE_ASK), Slip, lc_color);
                            Print ("Закрываем ", OrderSymbol(), " ", OrderType()," ", comment);
                        }
                    }
                }
            }
        }
        //Открываем ордера
        if (ops && ls_Sym[cnt] != "")
        {
            no_open = 0;
            cmd = IIFd (li_OP[cnt] == BUY, 1, -1);
            lc_color = IIFc (li_OP[cnt] == BUY, Blue, Red);
            ld_ask = MarketInfo (ls_Sym[cnt], MODE_ASK);
            ld_bid = MarketInfo (ls_Sym[cnt], MODE_BID);
            ld_point = MarketInfo (ls_Sym[cnt], MODE_POINT);
            ld_digits = MarketInfo (ls_Sym[cnt], MODE_DIGITS);
            ld_price = IIFd (li_OP[cnt] == BUY, ld_ask, ld_bid);
            ld_sl = NormalizeDouble (IIFd (StopLoss == 0, 0, ld_price - cmd * i_SL * ld_point), ld_digits);
            ld_tp = NormalizeDouble (IIFd (TakeProfit == 0, 0, ld_price + cmd * i_TP * ld_point), ld_digits);
            if (i_SL <= MarketInfo (ls_Sym[cnt], MODE_STOPLEVEL))
            {Print ("Стоп-лосс по инструменту ", ls_Sym[cnt], " меньше разрешенного ДЦ!!!"); no_open = 1;}
            if (i_TP <= MarketInfo (ls_Sym[cnt], MODE_STOPLEVEL))
            {Print ("Тейк-профит по инструменту ", ls_Sym[cnt], " меньше разрешенного ДЦ!!!"); no_open = 1;}
            if (MarketInfo (ls_Sym[cnt], MODE_TRADEALLOWED) != 1)
            {Print ("Торговля по инструменту ", ls_Sym[cnt], " запрещена ДЦ!!!"); no_open = 1;}
            if (no_open == 0)
            {
                Print ("Открываем ", ls_Sym[cnt]," ", li_OP[cnt]," ", comment);
                OrderSendReliable (ls_Sym[cnt], li_OP[cnt], l, ld_price, Slip, ld_sl, ld_tp, comment, mn, 0, lc_color);
            }
        }
    }
}

И ещё хочется спросить автора: "Кто ж Вас так напугал, что Вы ставите Slip в размере 10000???"
И где же Ваши заработки будут, если Вы готовы отдать Брокеру по 10 000 пунктов при открытии и закрытии позиции??? Мазахизм какой-то... ;)
Как показывает опыт, сколько не увеличмвай slip, при неспокойном рынке Ваша позиция или не откроется или не закроется в зависимости от Ваших намерений... :)
Для борьбы с реквотами используются другие "механизмы"...

 
совсем запутался чего куда вставлять...
 
У кого-то есть еще доработки этого советника?
 
Заметил странность. В комментарии лота написано EURAUD, на графике видно, что должна сработать пара EURAUD, но лот открыт по EURUSD. Так должно быть?
 
cajax:
Заметил странность. В комментарии лота написано EURAUD, на графике видно, что должна сработать пара EURAUD, но лот открыт по EURUSD. Так должно быть?

ДА так должно быть. Советник ищет пересечения по валютам, а потом открывает сделки пар, в которых есть USD
 

evbut, действительно, перечитал комментарии, понял. Спасибо!

 

Изменил маленько представленный советник!

Торгует по кросам - открывает позицию по самой слабой и сильной валютам. Стоп лосс и тейк профит считаются по ATR.

Вот результат за 2 месяца на Demo. По полученным результатам думаю стоит продолжить работу с Ccfp.


Summary:
Deposit/Withdrawal: 3 000.00 Credit Facility: 0.00
Closed Trade P/L: 7 095.95 Floating P/L: 0.00 Margin: 0.00
Balance: 10 438.97 Equity: 10 438.97 Free Margin: 10 438.97
Details:
Gross Profit: 23 994.85 Gross Loss: 16 898.90 Total Net Profit: 7 095.95
Profit Factor: 1.42 Expected Payoff: 80.64
Absolute Drawdown: 574.81 Maximal Drawdown: 2 740.42 (22.28%) Relative Drawdown: 24.93% (919.51)
Total Trades: 88 Short Positions (won %): 34 (70.59%) Long Positions (won %): 54 (53.70%)
Profit Trades (% of total): 53 (60.23%) Loss trades (% of total): 35 (39.77%)
Largest profit trade: 1 571.77 loss trade: -1 591.81
Average profit trade: 452.73 loss trade: -482.83
Maximum consecutive wins ($): 8 (2 082.43) consecutive losses ($): 4 (-1 298.67)
Maximal consecutive profit (count): 2 633.24 (3) consecutive loss (count): -2 278.51 (2)
Average consecutive wins: 2 consecutive losses: 2
 
Limon:

Изменил маленько представленный советник!

Торгует по кросам - открывает позицию по самой слабой и сильной валютам. Стоп лосс и тейк профит считаются по ATR.

Вот результат за 2 месяца на Demo. По полученным результатам думаю стоит продолжить работу с Ccfp.


Summary:
Deposit/Withdrawal: 3 000.00 Credit Facility: 0.00
Closed Trade P/L: 7 095.95 Floating P/L: 0.00 Margin: 0.00
Balance: 10 438.97 Equity: 10 438.97 Free Margin: 10 438.97
Details:
Gross Profit: 23 994.85 Gross Loss: 16 898.90 Total Net Profit: 7 095.95
Profit Factor: 1.42 Expected Payoff: 80.64
Absolute Drawdown: 574.81 Maximal Drawdown: 2 740.42 (22.28%) Relative Drawdown: 24.93% (919.51)
Total Trades: 88 Short Positions (won %): 34 (70.59%) Long Positions (won %): 54 (53.70%)
Profit Trades (% of total): 53 (60.23%) Loss trades (% of total): 35 (39.77%)
Largest profit trade: 1 571.77 loss trade: -1 591.81
Average profit trade: 452.73 loss trade: -482.83
Maximum consecutive wins ($): 8 (2 082.43) consecutive losses ($): 4 (-1 298.67)
Maximal consecutive profit (count): 2 633.24 (3) consecutive loss (count): -2 278.51 (2)
Average consecutive wins: 2 consecutive losses: 2

я думаю выражу общее мнение - скиньте пожалуйта на всеобщее тестирование данную версию. зарание благодарен.
 
lexandros:

Прошу прощения...


В данном советнике для контроля используется не СС, а CFP. я как то совсем забыл про это:)



Взять можно здесь http://slil.ru/28803747



а где можно найти индикатор CFP по этой ссылке пишется что файл не найден.