0
Спасибо за быстрый ответ! Я попробовал вставить и при проверке получил 6 ошибок. Либо я не правильно вставил, либо не подходит. Может наглядней на полном советнике найти причину? вот ссылка на него: yadi.sk/d/9WX7eF9ckmM37
avatar

Designer63rus

  • 26 ноября 2015, 22:00
0
Уважаемый AM2!) я не программист и собирал по конструктору. Мой советник на опционе делает ставки, но не может использовать этот код (он там прописан), не пойму как просто удвоить лот при каждой убыточной сделке. Могли бы вы подсказать, что нужно поменять в этом коде «мартингейл» чтоб он отталкивался исключительно от убыточных сделок. Надеюсь на вашу помощь или подсказку! Заранее спасибо! Могу целиком скинуть советник, если необходимо.
// ---

// ---
double newLotsMartingail(int magic = -1)
{
	int time = 0;
	double lastProfit = 0.0;
	double lastLots = 0.0;
	for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
	{
		if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
			continue;
		if ((OrderSymbol() == Symbol())
			&& OrderCloseTime() > time
			&& ((OrderMagicNumber() == magic) || (magic == -1)))
		{
			time = OrderCloseTime();
			lastProfit = OrderProfit();
			lastLots = OrderLots();
		}
	}
	/* Если последняя сделка по текущему символу была убыточна, то возвращаем ёё объём, умноженный на два;
	 иначе возвращаем начальный объём (extern int Lots) */
	double resultLots = 0.0;
	if (lastProfit < 0)
		resultLots = lastLots * 2;
	else
		resultLots = _Lots;
	resultLots = MathRound(resultLots / MarketInfo(Symbol(), MODE_LOTSTEP)) * MarketInfo(Symbol(), MODE_LOTSTEP); // приводим к нужному числу знаков
	resultLots = MathMin(resultLots, MarketInfo(Symbol(), MODE_MAXLOT));	
	resultLots = MathMax(resultLots, MarketInfo(Symbol(), MODE_MINLOT));
	if(resultLots > _MaxLots)
		resultLots = _Lots;
	// ---
	return(resultLots);
}

void get_lots()
{
	// MQL4 | присвоение объёма по входному параметру и мартингейлу при закрытии последней сделки в убытке
	OP_LOTS = newLotsMartingail(_MagicNumber);
}
// ---
// ---
avatar

Designer63rus

  • 26 ноября 2015, 17:04