Подскажите код, с помощью которого можно посчитать общее количество ордеров (по текущим открытым позициям ) в отдельности количество Buy позиций и количество Sell позиций ?
- Как заменить OrdersTotal() ?
- ФОРТС Прошу помощи
- [АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4.
//+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); }Из
//+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+
Invest777 писал(а) >>
Подскажите код, с помощью которого можно посчитать общее количество ордеров (по текущим открытым позициям ) в отдельности количество Buy позиций и количество Sell позиций ?
Подскажите код, с помощью которого можно посчитать общее количество ордеров (по текущим открытым позициям ) в отдельности количество Buy позиций и количество Sell позиций ?
https://www.mql5.com/ru/forum/107476/page12#72848 | NumberOfOrders | b-Orders.mqh | 09.04.2008 | Количество ордеров |
https://www.mql5.com/ru/forum/107476/page18#78397 | NumberOfPositions | b-Positions.mqh | 12.05.2008 | Количество позиций |
Invest777 >>:
'(' - function definition unexpected
'buys' - variable not defined
'sells' - variable not defined
а если описать "buy"и "sell" как глобальные переменные,то ошибки пропадают,кроме : '(' - function definition unexpected
'(' - function definition unexpected
'buys' - variable not defined
'sells' - variable not defined
а если описать "buy"и "sell" как глобальные переменные,то ошибки пропадают,кроме : '(' - function definition unexpected
дело в том что вот хочу с помощью етой функции OrdersTotal() найти количество ордеров :
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
и после етого, получив количество, выполнить условие : (где например,к-ство sell позиций 2) (ето урывок с кода все)
if (_ExpertOrdersOpen != 0 && _ExpertOrdersLimit < 1 && -sells == 2)
{
i = _ExpertOrdersTotal;
TradeCycleDirectin = iif(StringGetChar(_OrderComment[0],0) == '+',+1,-1);
_OrderType [i] = iif(TradeCycleDirectin > 0,OP_BUYSTOP,OP_SELLSTOP);
_OrderLots [i] = OrderLotsSize[i];
_OrderOpenPrice [i] = _OrderOpenPrice[i-1]+TradeCycleDirectin * OrderLevel[i] *Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderTakeProfit[i] = _OrderOpenPrice[i] + TradeDirection * Order_2_TakeProfit*Point;
_OrderComment [i] = iifStr(TradeCycleDirectin > 0,StringSetChar(OrderCommentMes[i],0,'+'),StringSetChar(OrderCommentMes[i],0,'-'));
_OrderSend();
modify = 1;
return(true)
но функция невыполняется..... почему..?
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
if (_ExpertOrdersOpen != 0 && _ExpertOrdersLimit < 1 && -sells == 2)
{
i = _ExpertOrdersTotal;
TradeCycleDirectin = iif(StringGetChar(_OrderComment[0],0) == '+',+1,-1);
_OrderType [i] = iif(TradeCycleDirectin > 0,OP_BUYSTOP,OP_SELLSTOP);
_OrderLots [i] = OrderLotsSize[i];
_OrderOpenPrice [i] = _OrderOpenPrice[i-1]+TradeCycleDirectin * OrderLevel[i] *Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderTakeProfit[i] = _OrderOpenPrice[i] + TradeDirection * Order_2_TakeProfit*Point;
_OrderComment [i] = iifStr(TradeCycleDirectin > 0,StringSetChar(OrderCommentMes[i],0,'+'),StringSetChar(OrderCommentMes[i],0,'-'));
_OrderSend();
modify = 1;
return(true)
Invest777 >>:
дело в том что вот хочу с помощью етой функции OrdersTotal() найти количество ордеров :
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
и после етого, получив количество, выполнить условие : (где например,к-ство sell позиций 2) (ето урывок с кода все)
if (_ExpertOrdersOpen != 0 && _ExpertOrdersLimit < 1 && -sells == 2)
{
i = _ExpertOrdersTotal;
TradeCycleDirectin = iif(StringGetChar(_OrderComment[0],0) == '+',+1,-1);
_OrderType [i] = iif(TradeCycleDirectin > 0,OP_BUYSTOP,OP_SELLSTOP);
_OrderLots [i] = OrderLotsSize[i];
_OrderOpenPrice [i] = _OrderOpenPrice[i-1]+TradeCycleDirectin * OrderLevel[i] *Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderTakeProfit[i] = _OrderOpenPrice[i] + TradeDirection * Order_2_TakeProfit*Point;
_OrderComment [i] = iifStr(TradeCycleDirectin > 0,StringSetChar(OrderCommentMes[i],0,'+'),StringSetChar(OrderCommentMes[i],0,'-'));
_OrderSend();
modify = 1;
return(true)
но функция невыполняется..... почему..?
дело в том что вот хочу с помощью етой функции OrdersTotal() найти количество ордеров :
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//---- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
if (_ExpertOrdersOpen != 0 && _ExpertOrdersLimit < 1 && -sells == 2)
{
i = _ExpertOrdersTotal;
TradeCycleDirectin = iif(StringGetChar(_OrderComment[0],0) == '+',+1,-1);
_OrderType [i] = iif(TradeCycleDirectin > 0,OP_BUYSTOP,OP_SELLSTOP);
_OrderLots [i] = OrderLotsSize[i];
_OrderOpenPrice [i] = _OrderOpenPrice[i-1]+TradeCycleDirectin * OrderLevel[i] *Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point;
_OrderTakeProfit[i] = _OrderOpenPrice[i] + TradeDirection * Order_2_TakeProfit*Point;
_OrderComment [i] = iifStr(TradeCycleDirectin > 0,StringSetChar(OrderCommentMes[i],0,'+'),StringSetChar(OrderCommentMes[i],0,'-'));
_OrderSend();
modify = 1;
return(true)
да ! спасибо, и вправду надо было просто создать 2 функции,1 на buy,2 на sell
Только у меня вот еще один вопрос появился.......при данном коде получается, ( выставляется sellstop или buystop с определенной ценой, tp и sl, но когда цена достигает етого стопа,то цикл на скоко я понемаю продолжается и выставляется следующий) как мне етот цикл прекратить, чтоб следующий открывался уже с другими условиями и параметрами?
Только у меня вот еще один вопрос появился.......при данном коде получается, ( выставляется sellstop или buystop с определенной ценой, tp и sl, но когда цена достигает етого стопа,то цикл на скоко я понемаю продолжается и выставляется следующий) как мне етот цикл прекратить, чтоб следующий открывался уже с другими условиями и параметрами?
if (_ExpertOrdersOpen != 0 && _ExpertOrdersLimit < 1 && -sells == 2) { i = _ExpertOrdersTotal; TradeCycleDirectin = iif(StringGetChar(_OrderComment[0],0) == '+',+1,-1); _OrderType [i] = iif(TradeCycleDirectin > 0,OP_BUYSTOP,OP_SELLSTOP); _OrderLots [i] = OrderLotsSize[i]; _OrderOpenPrice [i] = _OrderOpenPrice[i-1]+TradeCycleDirectin * OrderLevel[i] *Point; _OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point; _OrderStopLoss [i] = _OrderOpenPrice[i] - TradeDirection * Order_1_TakeProfit*Point; _OrderTakeProfit[i] = _OrderOpenPrice[i] + TradeDirection * Order_2_TakeProfit*Point; _OrderComment [i] = iifStr(TradeCycleDirectin > 0,StringSetChar(OrderCommentMes[i],0,'+'),StringSetChar(OrderCommentMes[i],0,'-')); _OrderSend(); modify = 1; return(true)
Можно обойтись одной функцией
//+------------------------------------------------------------------+ //| Массив для хранения количества открытых позиций каждого типа | //| Copyright © 2010, Victor Nicolaev | //| e-mail: vinin@mail.ru | //+------------------------------------------------------------------+ //| int Order_Count[6]; | //+------------------------------------------------------------------+ int Order_Count[6]; //+------------------------------------------------------------------+ //| Функция возвращаюшая количество ордеров определенного типа | //| исхода из заданных ограничений | //| Copyright © 2010, Victor Nicolaev | //| e-mail: vinin@mail.ru | //+------------------------------------------------------------------+ //| int Order_Count_Calculate(int lMagic, int lOP=-1); | //+------------------------------------------------------------------+ int Order_Count_Calculate(int lMagic, int lOP=-1){ ArrayInitialize(Order_Count,0); for (int i = OrdersTotal() - 1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != lMagic) continue; Order_Count[OrderType()]++; } if (lOP!=-1) return(Order_Count[lOP]); return(0); }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь