dd$

  • *****
  • 6139
  • 234
    • Просмотр профиля
форумчане подскажите пож, ищу советники для тестирования на основе одиночного мартина (простое удвоение лота после проиграша, не илан). Достаточно просто название. Если дадите ссылку - буду очень благодарен


Вера в мартины может дорого стоить)) При последовательном увеличении позиции после убытка понятие "риск" исчезает.

Рынок рано или поздно (на реале скорее рано) создаст условия для полного слива депозита.

Насчет простого удвоения лота после убытка - есть функция расчета лота, код ниже. Ее можно цеплять к любому советнику. Если условием входа указать отсутствие открытой сделки - будет чистый мартин. Тогда как выбирать купить или продать (чередовать или случайно).

Но если честно - все возможные комбинации условий  и фильтров давно проверены - ошибок в рынке не найдено. Мартины сливают.

По ссылке удвоение лота применено к стандартному советнику на основе macd. В тестере работает неплохо)

http://www.invest74.ru/forex_laboratory/interesnye_martiny/msg1581/#msg1581

Во вложении вариант входа по макд больше меньше 0.

Код
double LotSize()
{
    double    lot            = Lots;
    double     lot_min        = MarketInfo(Symbol() , MODE_MINLOT  );
    double     lot_max        = MarketInfo( Symbol(), MODE_MAXLOT  );
    double     lot_step        = MarketInfo( Symbol(), MODE_LOTSTEP );

    double lastLot = 0.0;
    if ( AfterStopLoss_Koeff > 0.0 ) lastLot = lastLossLot();

    if ( lastLot < 0.0001 )
    {
        int         lot_size        = MarketInfo( Symbol(), MODE_LOTSIZE );
        double     balance        = AccountBalance();
        int        leverage        = AccountLeverage();

        if ( MeansType == 2 ) balance = AccountEquity();
        if ( MeansType == 3 ) balance = AccountFreeMargin();

        if ( lot_min < 0 || lot_max <= 0.0 || lot_step <= 0.0 || lot_size <= 0 )
        {
            Print( "LotSize: invalid MarketInfo() results [" + lot_min + "," + lot_max + "," + lot_step + "," + lot_size + "]" );
            return(-1);
        }
        if ( leverage <= 0 )
        {
            Print( "LotSize: invalid AccountLeverage() [" + leverage + "]" );
            return(-1);
        }

        if ( MeansType > 0 ) lot = balance * Риск*0.01 * leverage / lot_size;
    }
    else
    {
        lot = MathCeil( lastLot * AfterStopLoss_Koeff / lot_step ) * lot_step;
    }

    lot = NormalizeDouble( lot / lot_step, 0 ) * lot_step;
    if ( lot < lot_min ) lot = lot_min;
    if ( lot > lot_max ) lot = lot_max;

    if ( AccountFreeMarginCheck( Symbol(), OP_BUY, lot ) < 10 || GetLastError() == 134 )
    {
        Alert( "Недостаточно свободных средств для открытия позиции размером ", DoubleToStr( lot, 2 ), " lots!" );
        last_trade = Time[0];
        return(-1);
    }

    return(lot);
}

double lastLossLot()
{
    int total = OrdersHistoryTotal(), last_op = 0; double last_profit = 0.0, last_lot = 0.0;
    for ( int z = total-1; z >= 0; z -- )
    {
        if ( !OrderSelect( z, SELECT_BY_POS, MODE_HISTORY ) )
        {
            int _GetLastError = GetLastError();
        //    Print( "OrderSelect( ", z, ", SELECT_BY_POS, MODE_HISTORY ) - Error #", _GetLastError, " ( ", ErrorDescription( _GetLastError ), " )" );
            continue;
        }
        if ( OrderSymbol() != Symbol() ) continue;
    //    if ( OrderMagicNumber() != _MagicNumber ) continue;

        if ( OrderOpenTime() > last_op )
        {
            last_op = OrderOpenTime();
            last_profit = OrderProfit();
            last_lot = OrderLots();
        }
    }

    if ( last_profit > 0.0 )
        return(0.0);
    else
        return(last_lot);

 

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.