WINZ16 проблема с тралом на фьючерсах: РЕШЕНО
выбор тикета сделки есть,
2016.11.04 17:44:56.499 (WINZ16,M1) dt=21271002 did=18591721 pt=0
ulong dt = HistoryDealGetTicket(i);
long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
ulong pt=PositionGetTicket(i);
long ID=PositionGetInteger(POSITION_IDENTIFIER);
Print("dt="+dt+" did="+did+" pt="+pt+" ID="+ID);
2016.11.04 17:54:54.447 (WINZ16,M1) dt=21271002 did=18591721 pt=0 ID=18591721
прикол в том, что на тестере и на демо все работает ок, не могу понять причину, потому что не знаю этих нюансов,
проблема решена так:
вместо:
if(PositionSelectByTicket(PositionGetTicket(i))==true && PositionGetSymbol(i)==symToWork2)
я сделал:
if((PositionSelect(symToWork2) || PositionSelectByTicket(PositionGetTicket(i))==true || PositionSelectByTicket(PositionGetInteger(POSITION_IDENTIFIER))==true) && PositionGetSymbol(i)==symToWork2)
трал заработал. Всем спасибо
также модификацию я сделал не по тикету и по идиентификатору позиций
PositionGetInteger(POSITION_IDENTIFIER)
а лучше так:
(PositionSelectByTicket(PositionGetTicket(i))==true || (!PositionSelectByTicket(PositionGetTicket(i)) && PositionSelect(symb)))
т.е. если позиция не выбрана по тикету - тогда выбор по символу - чтоб работало и на хедже и на неттинговом счете
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет. Друзья,
Есть реальный счет в Бразильской компании. Есть фьючерс WINZ16
открывается сделка, например BUY, но почему то не срабатывает трал,
ткните пальцем где копать и в каком месте изучать.
код трала:
{
ZeroMemory(request);
ZeroMemory(result);
int PosTotal=PositionsTotal();
for(int i=PosTotal-1;i>=0;i--)
{
if((PositionSelectByTicket(PositionGetTicket(i))==true || (!PositionSelectByTicket(PositionGetTicket(i)) && PositionSelect(symToWork2))) && PositionGetSymbol(i)==symToWork2)
{
int trailing_level=TrailingStopa;
stop_level=SymbolInfoInteger(PositionGetString(POSITION_SYMBOL),SYMBOL_TRADE_STOPS_LEVEL);
if(trailing_level<(int)stop_level && trailing_level!=0) trailing_level=(int)stop_level;
if((PositionGetString(POSITION_SYMBOL)!=symToWork2)) continue;
order_open_price= PositionGetDouble(POSITION_PRICE_OPEN);
if(averageprice!=-1)order_open_price=averageprice;
order_type = PositionGetInteger(POSITION_TYPE);
request.order = PositionGetInteger(POSITION_IDENTIFIER);
if(order_type==POSITION_TYPE_BUY && (order_type==type || type==-1))
{
// Трейлинг стоп
if((trailing_level==0))continue; // условие, при котором трейлинг стоп не работает
double sl=PositionGetDouble(POSITION_SL);
double profit=PositionGetDouble(POSITION_PROFIT);
if(SymbolInfoDouble(symToWork2,SYMBOL_BID)-trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT)>order_open_price
&& (SymbolInfoDouble(symToWork2,SYMBOL_BID)-trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT)>sl || sl==0))
{
sl=SymbolInfoDouble(symToWork2,SYMBOL_BID)-trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT);
request.sl=sl;
ModifyOrders(PositionGetInteger(POSITION_IDENTIFIER),request.sl,request.tp,"SimpeTrailing");
}
}// end POSITION_TYPE_BUY
if(order_type==POSITION_TYPE_SELL && (order_type==type || type==-1))
{
//--- Трейлинг стоп
if((trailing_level==0)) continue;
double sl=PositionGetDouble(POSITION_SL);
double profit=PositionGetDouble(POSITION_PROFIT);
if(SymbolInfoDouble(symToWork2,SYMBOL_ASK)+trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT)<order_open_price
&& (SymbolInfoDouble(symToWork2,SYMBOL_ASK)+trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT)<sl || sl==0))
{
sl=SymbolInfoDouble(symToWork2,SYMBOL_ASK)+trailing_level*SymbolInfoDouble(symToWork2,SYMBOL_POINT);
request.sl=sl;
ModifyOrders(PositionGetInteger(POSITION_IDENTIFIER),request.sl,request.tp,"SimpeTrailing");
}
}// end POSITION_TYPE_SELL
}// end if select
}// end for
}
проблема в том, что позиция есть, показывает PositionsTotal() = 1
но дальше не идет , потому что тикет = 0 PositionGetTicket(i) = 0
как быть?
вот тут много всяких цифр. ::
как обрабатывать трал здесь?
проблема решена так:
вместо:
я сделал: