OrdersTotal() возвращает количество рыночных и отложенных ордеров, как в mql5 так и в mql4 одинаково.Похоже что mql5 не пользуется популярностью?
По крайней мере на этом форуме....
Все же спрошу.
В mql5 OrdersTotal() возвращает кол-во отложенных ордеров?
Как получить кол-во действующих, если это возможно?
int CountOpenOrders()
{
int i, k=OrdersTotal(), kp=0;
for (i=0; i<k; i++)
if(OrderGetTicket(i)>0)
if(orderInfo.Type() == ORDER_TYPE_BUY || orderInfo.Type() == ORDER_TYPE_SELL)
if(orderInfo.Magic() == magicNumber) kp++;
return(kp);
}
}
bool pos_open = positionInfo.Select(_Symbol);
int pos_type=(ENUM_POSITION_TYPE)positionInfo.PositionType();
lot = symbolInfo.NormalizePrice(GetSizeLot());
ResetLastError();
if(nResult == ENTER_BUY) // сигнал на покупку
{
if(!pos_open) // Позиции нет
{
comment = "Открыта позиция BUY";
if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,lot,Ask,StopLoss,TakeProfit,comment))
Print("Ошибка при открытии позиции BUY: ",GetLastError()," - ", ErrorDescription(GetLastError()));
}
int total =0; // Всего сделок в списке выбранной истории
int count =0; // Счетчик сделок по символу позиции
string deal_symbol =""; // символ сделки
//--- Если история позиции получена
bool pos_open = positionInfo.Select(_Symbol);
if(HistorySelect(positionInfo.Time(),TimeCurrent()))
{
//--- Получим количество сделок в полученном списке
total=HistoryDealsTotal();
//--- Пройдем по всем сделкам в полученном списке
for(int i=0; i<total; i++)
{
//--- Получим символ сделки
deal_symbol=HistoryDealGetString(HistoryDealGetTicket(i),DEAL_SYMBOL);
//--- Если символ сделки и текущий символ совпадают, увеличим счетчик
if(deal_symbol==_Symbol)
count++;
}
return(count);
}
Что за ошибки в журнале?
Ну как можно найти ошибку не видя кода?здравствуйте! есть специалисты? подскажите плз.
Написал советника в mql4 самого простейшего, так потренироваться ну и появилась необходимость перевести в mql5. Перевел, но возникла проблема переменные «input» которые я задаю в самом начале почему-то не "задаются". Например, переменная lot=1 в тестере выскакивает ошибка, что объем ордера равен 0 и не может быть открыт. Если в функции открытия ордера жестко вбить 1 лот, тогда все ОК ордер срабатывает открываю ордер с помощью CTrade в чем проблема то?!И переменная трейлинг стоп, которая задается там же почему-то равна 150(а стоит 100).стопы тоже по 0.
Неправильно ВСЁ... А почему не почитать документацию? -https://www.mql5.com/ru/docs/trading/ordersendПомогите начинающему разобраться с функцией OrderSend. Мало в интернете материалов по понятному обучению MQL5:
{
int ticet;
ticet =OrderSend (TRADE_ACTION_DEAL,"EURUSD",0.01,ORDER_TYPE_BUY,ORDER_FILLING_FOK,111,"ордер на покупку");
}
При компиляции выходит ошибка:"OrderSend'- wrong parameters count.Что неправильно? И если можно исправьте на правильно.
bool OrderSend(
MqlTradeRequest& request[COLOR=#000000],[/COLOR] // структура запроса
MqlTradeResult& result // структура ответа
);
Можно. Структуры могут наследоваться только от структур.Я скопировал MqlRates в R и обращаюсь к её элементам типа (R[x].high+R[x].low)/2,
можно-ли это дело как-нибудь расширить\унаследовать так, что бы вместо этого писать типа R[x].medprice ???
struct MyMQLRates : MqlRates
{
double MedPrice()
{
return (high + low)/2;
}
}
int tiket;
double TPL,SPL,price;
int limit,stop;
CTrade m_trade;
if( !PositionSelect(Symbol()))
m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,lot,SYMBOL_BID,0,0,"");
if(PositionSelect(Symbol()) && OrdersTotal()==0 )
{
price=PositionGetDouble(POSITION_PRICE_OPEN);
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
{
TPL=price-TP*_Point;
SPL=price+SL*_Point;
m_trade.BuyLimit(lot,TPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
limit = m_trade.RequestOrder();
m_trade.BuyStop(lot,SPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
stop = m_trade.RequestOrder();
}
else
{
TPL=price+TP*_Point;
SPL=price-SL*_Point;
limit = m_trade.SellLimit(lot,TPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
stop = m_trade.SellStop(lot,SPL,Symbol(),0,0,ORDER_TIME_GTC,0,"");
}
}
if ( OrdersTotal()==1)
{
if (OrderSelect(Symbol()));
{
if (limit!=0)
{m_trade.OrderDelete(limit);Print(limit,"лимит");}
if (stop!=0)
{m_trade.OrderDelete(stop);Print(stop,"стоп");}
}
}
}