Вы читали документацию?
Parameters
ticket
[in] Индекс заказа или билет заказа в зависимости от второго параметра.
select
[in] Флаги выбора. Это может быть любое из следующих значений:
SELECT_BY_POS - индекс в пуле заказов,
SELECT_BY_TICKET - индекс является билетом заказа.
pool=MODE_TRADES
[in] Дополнительный индекс пула заказов. Используется, когда выбранный параметр - SELECT_BY_POS. Это может быть любое из следующих значений:
MODE_TRADES (по умолчанию) - ордер выбирается из торгового пула (открытые и отложенные ордера),
MODE_HISTORY - ордер выбирается из пула истории (закрытые и отмененные ордера).
bool OrderSelect( int index, // index or order ticket int select, // flag int pool=MODE_TRADES // mode );
boopa26 хочет закрыть открытые ордера, поэтому boopa выбирает MODE_TRADES в качестве третьего параметра
делает ли boopa26 SELECT_BY_POS или SELECT_BY_TICKET? boopa26 не знает.
SELECT_BY_POS //index inside order pool, SELECT_BY_TICKET //index is order ticket.
https://docs.mql4.com/trading/orderclose
как boopa26 циклически, без циклов for или while, но с условиями if закрыть открытые ордера с помощью функции выбора ордера?
документация закрытие ордера требует, чтобы был найден билет ордера, но boopa26 делает выбор ордера, чтобы найти позицию ордера, а не билет
bool OrderClose( int ticket, // ticket double lots, // volume double price, // close price int slippage, // slippage color arrow_color // color );
1. выбрать ордер
2. закрыть ордер
не знает как
//+------------------------------------------------------------------+ //| Moving Average.mq4 | //| Copyright 2005-2014, MetaQuotes Software Corp. | //| http://www.mql4.com | //+------------------------------------------------------------------+ #property copyright "2005-2014, MetaQuotes Software Corp." #property link "http://www.mql4.com" #property description "Moving Average sample expert advisor" #define MAGICMA 20131111 //--- Inputs input double Lots =0.1; input double MaximumRisk =0.02; input double DecreaseFactor=3; input int MovingPeriod =12; input int MovingShift =6; //+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ //| Calculate optimal lot size | //+------------------------------------------------------------------+ double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); // history orders total int losses=0; // number of losses orders without a break //--- select lot size lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); //--- calcuulate number of losses orders without a break if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //--- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1); } //--- return lot size if(lot<0.1) lot=0.1; return(lot); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { double ma; int res; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- sell conditions if(Open[1]>ma && Close[1]<ma) { res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red); return; } //--- buy conditions if(Open[1]<ma && Close[1]>ma) { res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue); return; } //--- } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double ma; //--- go trading only for first tiks of new bar if(Volume[0]>1) return; //--- get Moving Average ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //--- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //--- check order type if(OrderType()==OP_BUY) { if(Open[1]>ma && Close[1]<ma) { if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("OrderClose error ",GetLastError()); } break; } if(OrderType()==OP_SELL) { if(Open[1]<ma && Close[1]>ma) { if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("OrderClose error ",GetLastError()); } break; } } //--- } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick() { //--- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //--- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //--- } //+------------------------------------------------------------------+советник поскользящей средней использует цикл для закрытия открытых ордеров
Я думаю, что "boopa26" должен сделать следующее:
- Во-первых, "boopa26" должен сначала изучить основы кодирования (например, на C).
- Затем "boopa26" должен прочитать и следовать книге/учебнику (даже если он старый и неактуальный).
- В то же время, "boopa26" должен прочитать всю документацию с особым вниманием к обновлениям MQL4, которые не упоминаются в книге/руководстве.
- Затем "boopa26" должен изучить несколько примеров кода индикаторов, советников и скриптов в базе кодов пользователя.
- Затем "boopa26" может начать создавать свои собственные, но очень простые индикаторы и постепенно наращивать их, пока не сможет полностью понять и сделать более сложные индикаторы.
- Затем "boopa26" может начать создавать свои собственные, но очень простые советники и медленно наращивать их до полного понимания и создания более сложных советников.
"boopa26" также должен усвоить очень важный урок: "boopa26" не должен пропускать все необходимые шаги, потому что иначе "boopa26" просто потратит время всех впустую, и вместо "прекрасного торта" у "boopa26" будет только "сгоревший уголь".
Я думаю, что "boopa26" должен сделать следующее:
- Во-первых, "boopa26" должен сначала изучить основы кодирования (например, на C).
- Затем "boopa26" должен прочитать и следовать книге/учебнику (даже если он старый и неактуальный).
- В то же время, "boopa26" должен прочитать всю документацию с особым вниманием к обновлениям MQL4, которые не упоминаются в книге/руководстве.
- Затем "boopa26" должен изучить несколько примеров кода индикаторов, советников и скриптов в базе кодов пользователя.
- Затем "boopa26" может начать создавать свои собственные, но очень простые индикаторы и постепенно наращивать их, пока не сможет понять и сделать более сложные индикаторы.
- Затем "boopa26" может начать создавать свои собственные, но очень простые советники и медленно наращивать их до полного понимания и создания более сложных советников.
"boopa26" также должен усвоить очень важный урок, что "boopa26" не должен пропускать все необходимые шаги, потому что иначе "boopa26" просто потратит время всех впустую, и вместо "красивого торта" у него будет только "сгоревший уголь".
1. не требуется знание c. mql4 это разные функции
2. книга уже прочитана
3. уже прочитал документацию
4. код уже написан
5. ?
6. ?
boopa26 не тратит время людей
Учитель FMIC, который учит "boopa26" печь пироги с углем.
Класс угольного торта FMIC
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
boopa26 может написать код отправки ордеров, но не может написать функцию выбора ордеров для закрытия ордеров. хочет написать функцию выбора ордеров для закрытия ордеров без циклов for или while. boopa26 хочет написать функцию выбора ордеров для закрытия ордеров с условиями if, но boopa26 не понимает, как собрать функцию выбора ордеров для закрытия ордеров.
пример отправки ордера на покупку
if(OrdersTotal()==0)OrderSend(Symbol(),OP_BUY,.1,Ask,3,0,0,NULL,9,0,clrNONE);
пример order select. boopa26 не понимает
OrderSelect(int index,int select,int pool)
что такое int index?
что такое int select?
что такое int pool?
что делает order select?