1. Выбрать ордер.Ребят, помогите составить формулу. Задача следующая:
Есть 3 ордера. Совокупный убыток по ордерам 10%. Ордер №2 и каждый последующий ордер больше предыдущего на 1%. Как рассчитать, какой процент у каждого ордера? Всех с Новым Годом.
Что-то я не пойму. Давайте тогда на другом примере.1. Выбрать ордер.
2. Получить его прибыль. Лучше с учётом свопов и комиссий. Убыток это отрицательная прибыль.
3. Вычислить %.
Всё это в цикле, перебирая все нужные ордера.
Зачем изобретать деревянный велосипед и что то считать, если на каждом яблоке есть ценник?Что-то я не пойму. Давайте тогда на другом примере.
Есть 3 яблока. Совокупно они стоят 10 руб. Второе яблоко и каждое последующие(2-е и 3-е яблоко) больше предыдущего на 1 руб. Сколько стоит каждое яблоко? Можно поподробнее?
Нет. Ценник есть на упаковке в которой 3 яблока.на каждом яблоке есть ценник?
Я вопрос неправильно задал, сорри. Нужно выставить 3 ордера. Совокупный убыток по ордерам 10%. Ордер №2 и каждый последующий ордер больше предыдущего на 1%. Как рассчитать, какой процент у каждого ордера?Прибыль ордера в валюте депозита = OrderProfit();
А с учётом свопов и комиссий = OrderProfit()+OrderSwap()+OrderCommission();
Попробовал ваш в советнике, не работает. Использовал такой, оказался более рабочимНабросал советника - тральщика профита. Его можно отдельно использовать или вытащить из него код.Код:} Trailing(); } } return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void Trailing() { for(int i=OrdersTotal() -1; i>=0; i--) { ticket=OrderSelect(i, SELECT_BY_POS, MODE_TRADES); { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicID) { if(OrderType() == OP_BUY) { if(Bid - OrderOpenPrice() > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() < Bid-(TrailingStop + TrailingStep) * Point || OrderStopLoss() == 0); { ticket=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop * Point, Digits),0,0); Print("Ошибка модификации ордера на покупку"); } } } if(OrderType() == OP_SELL) { if(OrderOpenPrice() - Ask > TrailingStop * Point || OrderStopLoss() == 0) { if(OrderStopLoss() > Ask + (TrailingStep + TrailingStop) * Point || OrderStopLoss() == 0) { ticket=OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStop * Point, Digits),0,0); Print("Ошибка модификации ордера на продажу"); } } } } } } ticket=0; }
Как выставлять ордера и получать их данные, это все я знаю как делать.Прибыль ордера в валюте депозита = OrderProfit();
А с учётом свопов и комиссий = OrderProfit()+OrderSwap()+OrderCommission();
В общем, некое решение нашел, в коде считается вроде как правильно:Ребят, помогите составить формулу. Задача следующая:
Нужно выставить 3 ордера. Совокупный убыток по ордерам 10%. Ордер №2 и каждый последующий ордер больше предыдущего на 1%. Как рассчитать, какой процент у каждого ордера? Всех с Новым Годом.
double stop = 10.0;
double percent = 1;
int orders = 3;
double res = 0;
double sum = 0;
if(orders == 2)
{
for(int i=1; i<=orders; i++)
{
if(i == 1)
{
res = (stop - percent) / orders;
}
else
{
res = res + percent;
}
sum = sum + res;
Print("Ордер ",i,": ",res,"%");
}
}
else
if(orders == 3)
{
for(int i=1; i<=orders; i++)
{
if(i == 1)
{
res = (stop - orders * percent) / orders;
}
else
{
res = res + percent;
}
sum = sum + res;
Print("Ордер ",i,": ",res,"%");
}
}
Print("sum=",sum);
Во первых: не эксперт, а индикатор.Есть вот такая задача ). ЗАЩИТА от разрыва связи, ну то есть разрыва котировок ). Как это решается господа ПРОФИ в программирование на MQL4 ВАМ вопрос ). Эксперт пересчитывает от более позднего бара к более новому, происходит разрыв связи допустим на несколько баров, мы имеем последний посчитанный бар. Допустим был разрыв на 5 баров, теоретически после того как связь возобновилась НАШ первый бар должен стать ШЕСТЫМ, ну он по прежнему первый (iBarShift у этого времени такой), а нулевой бар тот который только что пришёл (iBarsShift у него 0), ТАК ВОТ ЗАДУМАНО у МЕТАКВОТЕСОВ, по непонятной "хитрой" задумке ), потом пара тиков, и он становится шестым. Не замечали такого нет ? Как с этим бороться ? Если конечно замечали такое ).
Нет не индикатор а эксперт именно.
Все верно, пока не будут заполнены пробелы по времени самими барами, отрисоваными, на графике - первый не станет шестым. Ведь, например М1, если разрыв между барами по времени 3 мин., то их нумерация не перескакивает через 3.связь возобновилась НАШ первый бар должен стать ШЕСТЫМ, ну он по прежнему первый (iBarShift у этого времени такой), а нулевой бар тот который только что пришёл (iBarsShift у него 0), ТАК ВОТ ЗАДУМАНО у МЕТАКВОТЕСОВ, по непонятной "хитрой" задумке ), потом пара тиков, и он становится шестым.
Нужно с умом подходить к любым изменениям в коде. Просто вставить кусок кода и ждать маны небесной - смешно!Попробовал ваш в советнике, не работает. Использовал такой, оказался более рабочим
В OnInit() создавать глобальную переменную при оптимизации:Всех приветствую.
В MQL4-советнике возможно как-либо отследить начало или окончание оптимизации этого советника в тестере стратегий? Тестер отдаёт информацию о прогонах? Мне нужно, чтобы в начале первого прогона оптимизации советник создавал некую глобальную переменную, а по окончании последнего прогона удалял её.
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(IsOptimization())
{
if(!GlobalVariableCheck("Start"))
GlobalVariableSet("Start",1);
}
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
if(IsOptimization())
{
GlobalVariableDel("Start");
}
}
А причем тут метаквоты? Инфа в терминале обновляется по приходу нового тика от брокера - брокер молчит - терминал не шевелится.Ну какие идеи ? )) Пару тиков ждать ? А если выходной и их нету ? А отрисовать эксперт что-то должен. Или метаквотесам надо чота поменять )))) и реализовать нормально приход нового тика после разрыва ?