Levis_Rock
Активный участник
Так то понятно, как это записать?Ну так внутри функции total поставь в условиях еще и проверку магиков , если магик не от этой пары - делаешь continue и так до конца перебора ордеров.
Так то понятно, как это записать?Ну так внутри функции total поставь в условиях еще и проверку магиков , если магик не от этой пары - делаешь continue и так до конца перебора ордеров.
На глобальном уровнеТак то понятно, как это записать?
extern int Magic = 4335;
int buys_,sells_,buys_S,sells_S,buys_L,sells_L,Orders_Total;
CountOpenedPositions_f();
if(Orders_Total==0)...
////////////////////////////////////////////////////////////////////////////////////
void CountOpenedPositions_f()
{
buys_=0;
sells_=0;
buys_S=0;
sells_S=0;
buys_L=0;
sells_L=0;
Orders_Total=0;
int type=-1;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
type=OrderType();
if(type==OP_BUY) buys_++;
else
if(type==OP_SELL) sells_++;
else
if(type==OP_BUYSTOP) buys_S++;
else
if(type==OP_SELLSTOP) sells_S++;
else
if(type==OP_BUYLIMIT) buys_L++;
else
if(type==OP_SELLLIMIT) sells_L++;
}
Orders_Total=buys_+sells_+buys_S+sells_S+buys_L+sells_L;
}
Elvis Burunduk,
if (OrderMagicNumber() == магик именно от этой пары && (total==0))
Примерно так ?
if (Hour()>=2 && Hour()<3) return(0);
if (Hour()>=5 && Hour()<8) return(0);
if (Hour()>=10 && Hour()<12) return(0);
if (Hour()>=14 && Hour()<15) return(0);
if (Hour()>=16 && Hour()<17) return(0);
if (Hour()>=18 && Hour()<21) return(0);
if (total==0) // если нет позиций
{
// Buy
if(Close[2]<BB_Up && Close[1]>BB_Up && MA_1_Long>MA_2_Long)
{
OrderSend(Symbol(),OP_BUY,Lots,Ask,50,BB_Low-reserve*Point,0,"Buy MIN RISK",86388,0,Green);
return(0);
}
total=OrdersTotal();
for(cnt=0;cnt<total;cnt++)
Elvis Burunduk,
И есть в закрытии ордеров
eevviill2,
Elvis Burunduk,
Ругается на CountOpenedPositions_f()
ошибку то напиши, мы не экстрасенсы...
'CountOpenedPositions_f' - function can be declared only in the global scope
{
// Buy
//-----------------------------------------------------------------------------------
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType()<=1 && OrderSymbol() == "GBPJPY" && OrderMagicNumber() == 96388)
return(0);
{
}
}
}
//------------------------------------------------------------------------------------
Можно и не убирать было:total убрал, если символ и магик совпадает, то всё открывается как нужно, так же при тесте менял в коде пару и магик, и бот начинает открывать тысячи ордеров, значит всё должно быть в порядке.
total=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
if(OrderSymbol()==Symbol() &&
OrderMagicNumber()==Magic &&
(OrderType()== OP_BUY || OrderType()== OP_SELL))
total++;
}
Где же ты раньше был, дружище.Можно и не убирать было:
Только проверку на бай или селл можно и не делать, если других (отложенных) ордеров не предвидится. Ну а магик свой подставь вместо Magic.PHP:total=0; for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && (OrderType()== OP_BUY || OrderType()== OP_SELL)) total++; }
Я не ожидал, что такой простой вопрос вызовет столько дискуссий...Где же ты раньше был, дружище.
Я не ожидал, что такой простой вопрос вызовет столько дискуссий...
Та ты вообще спец, как без тебя:laugh:Я не ожидал, что такой простой вопрос вызовет столько дискуссий...
Кстати, этот вариант не совсем верный, т.к. если у тебя открытие ордеров происходит из основной функции типа OnTick(), команда return(0) перезапустит сова и все команды после команд открытия уже не отработают. Т.е. если есть ордер в рынке, перезапуск сова.Перед открытием позиций бай и селл :
Кстати, этот вариант не совсем верный, т.к. если у тебя открытие ордеров происходит из основной функции типа OnTick(), команда return(0) перезапустит сова и все команды после команд открытия уже не отработают. Т.е. если есть ордер в рынке, перезапуск сова.
Да не, 5 минут копипастаДа я как бы тоже не ожидал,
Levis_Rock , немного не так надо было для бая,
if(OrderType()<=1 && OrderSymbol() == Symbol() && OrderMagicNumber() == 96388)
NULL можно вместо Symbol() применить.
А то задолбаешься вносить в каждую копию изменения, и как всегда где то забудешь сменить пару - будешь ломать голову.