Как минимум, нужно видеть, как объявлены position и ExtTrade. Скорее всего,
position.SelectByIndex(i)
не выбирает позицию так, как это делает PositionGetSymbol или PositionSelect.
Как минимум, нужно видеть, как объявлены position и ExtTrade. Скорее всего,
не выбирает позицию так, как это делает PositionGetSymbol или PositionSelect.
#include <Trade\Trade.mqh> #include <Trade\PositionInfo.mqh> input int StopLoss = 580; input double Risk = 3; input double Level_MACD = 0.00073; input int macd_level = 3; //--- int handle_stoch_M1=0; int handle_stoch=0; int handle_stoch_cl=0; int handle_macd_cl=0; int handle_macd=0; int handle_atr=0; int handle_maLOW=0; int handle_ma=0; bool ExtHedging=false; CTrade ExtTrade; CPositionInfo position; #define MAGIC 123
Как то так.
Как по мне так PositionInfo.mqh это зло. Давно отказался от его использования.
int total = 0, Magic = 12345; #ifdef __MQL5__ total = PositionsTotal(); #else total = OrdersTotal(); #endif for(int cnt=0; cnt<total; cnt++) { #ifdef __MQL5__ if( _Symbol != PositionGetSymbol(cnt) ) continue; if( PositionGetInteger(POSITION_TYPE)!= ORDER_TYPE_BUY && PositionGetInteger(POSITION_TYPE)!= ORDER_TYPE_SELL ) continue; if( PositionGetInteger(POSITION_MAGIC) != Magic ) continue; #else if( !OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) ) continue; if( OrderSymbol() != _Symbol) continue; if( OrderMagicNumber() != Magic ) continue; if( OrderType()!= ORDER_TYPE_BUY && OrderType()!= ORDER_TYPE_SELL ) continue; #endif }
Мне больше нравится выбор по тикету.
ulong ticket = 0; if(posTotal > 0) { for(int i = PositionsTotal(); i-- > 0;) { ticket = PositionGetTicket(i); // и делай с ним что хошь } }
Дело в том, что все действия с позициями требуют тикет позиции.
какие ещё варианты?
Больше никаких.
Совсем недавно выбор по символу работал исключительно с одной позицией и на hadge счетах выбирал только одну позицию. Я даже начал писать Константину, что так неправильно. Но увидев индекс в запросе полез в документацию и был приятно удивлён изменениям.
какие ещё варианты?
ЗЫ
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
CPositionInfo::SelectByIndex()
fxsaber, 2016.12.01 08:41
@Rashid Umarov, зачем выбор позиции для Hedge и Netto сделали по-разному?//| Select a position on the index |
//+------------------------------------------------------------------+
bool CPositionInfo::SelectByIndex(const int index)
{
ENUM_ACCOUNT_MARGIN_MODE margin_mode=(ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE);
//---
if(margin_mode==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)
{
ulong ticket=PositionGetTicket(index);
if(ticket==0)
return(false);
}
else
{
string name=PositionGetSymbol(index);
if(name=="")
return(false);
}
//---
return(true);
}
Мне больше нравится выбор по тикету.
Дело в том, что все действия с позициями требуют тикет позиции.
где вы увидели, что нужен тикет, прочитайте внимательно справку, как работает PositionGetTicket
PositionGetString(POSITION_SYMBOL); PositionGetInteger(POSITION_MAGIC); PositionGetDouble(POSITION_PROFIT);
где в этих функциях тикет
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть функция, которая не всегда работает правильно. Выбирает не ту позицию из двух открытых.ЧТО НЕ ТАК?