[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 147

 

Профи не проходите мимо, нужна ваша помощь. Бот по условию ранее открывает sell позицию далее эта позиция должна быть закрыта ниже, см. код и там где должна быть закрыта sell позиция должна открыться buy поза, количество открытых позиций должно быть 1 (OrdersTotal()). Вопрос в том как бы сделать что то вроде очереди исполнения приказов: чтобы сначала закрылась селл поза а потом там же открылась бай поза, и количество открытых позиций равнялось бы 1?

OrderSend(Symbol(),OP_BUY,Lots,Ask,4,0,0,"",0,0,Green);
    for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderType()==OP_SELL)   // long position is opened
           {
                 OrderClose(OrderTicket(),OrderLots(),Ask,4,Violet); // close position
                }
    }
 
флагами bool
 
eddy:
речь про то что он задан только буфферу, а не внешной переменной

ну так и используйте этот indicator_colorN

 
eddy:
речь про то что он задан только буфферу, а не внешной переменной
средствами MQL никак. Но если О-О-О-О-ОЧЕНЬ нужно, то, конечно, сделать можно)))
 
alsu:
средствами MQL никак. Но если О-О-О-О-ОЧЕНЬ нужно, то, конечно, сделать можно)))

ну вы же не знаете даже что нужно...

уверен, что потребности eddy решаются MQL

 
sergeev:

ну вы же не знаете даже что нужно...

уверен, что потребности eddy решаются MQL

да нет, понял я... ему нужно в коде индикатора программно получить цвет отрисовки из индикаторного буфера (так ведь, eddy?). Насколько мои знания мне позволяют судить, в MQL такое невозможно.
 
alsu:
да нет, понял я... ему нужно в коде индикатора программно получить цвет отрисовки из индикаторного буфера (так ведь, eddy?). Насколько мои знания мне позволяют судить, в MQL такое невозможно.
возможно.
просто использовать параметр indicator_colorN. Это можно сказать такая же переменная.
 
sergeev:
возможно.
просто использовать параметр indicator_colorN. Это можно сказать такая же переменная.

неееееее.

Допустим, у нас есть индикатор, который рисует линию. Пусть мы хотим нарисовать этим индикатором кружочек. Но хотим сделать его зеленым, если инликаторная линия зеленая, и красным, если она красная.

 

Господа программисты, пожалуйста подскажите как сделать правильно закрытие всех ордеров. Ниже привожу решаемую задачу и что посоветовали сделать. В общем все получается, кроме закрытия ордеров и установки флага на запрет торговли...

Уверен среди Вас есть опытные програмисты. Помогите пожалуйста прописать условия в советнике:
1) С+=профит по ордеру(1)+профит по ордеру(2)+...+профит по ордеру(n) - сумма профита по всем открытым ордерам в текущий момент времени.
2) С-=убыток по ордеру(1)+убыток по ордеру(2)+...+убыток по ордеру(n) - сумма убытков по всем открытым ордерам в текущий момент времени.
3) X=(c+)/(c-) - отношение прибыли к убытку в текущий момент времени
4) Если Величина средств (S) умноженная на отношение прибыли к убытку(X) больше опрделенной заданной величины (K), то все впорядке, торгуем дальше. (если S*X>K, то ок)
5) Если Величина средств (S) умноженная на отношение прибыли к убытку(X) меньше опрделенной заданной величины (K), то закрываются все открытые ордера по текущим котировкам и отключается советник до следующего включения руками. (S*X<K, close all order and off)

Мне кажется это была бы неплохая защита от слива.

Примерно так. Создаем две функции, которые считают профит и убыток:
double CalculateProfitTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() > 0)
Result = Result + OrderProfit();
return(Result);
}

double CalculateLossTotal()
{
double Result = 0;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderProfit() < 0)
Result = Result + MathAbs(OrderProfit());
return(Result);
}

А в функцию start() прописываем свои условия.
Например так:
X = CalculateProfitTotal() / CalculateLossTotal();
if(AccountEquity() * X < K)
{
//Здесь закрываем все ордера и
//устанавливаем флаг запрещающий торговлю
return(0);
}

 
alsu:

Допустим мы хотим нарисовать индикатором кружочек. Но хотим сделать его зеленым, если инликаторная линия зеленая

вот и хочу объект синим создать)

sergeev, т.е. indicator_color1 это color-переменная?

Причина обращения: