stark2004:
Здравствуйте ,
Как на mql5 открыть позицию buy с маджиком 5 , лотом 0.1 , и закрыть ее если ее профит больше 3 ?
g Попробуйте этот код, написал на скорую руку, протестировать нет возможности у меня занят терминал.
//+------------------------------------------------------------------+ //| test_07.mq5 | //| Sergey Gritsay | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Sergey Gritsay" #property link "https://www.mql5.com" #property version "1.00" #include <Trade\Trade.mqh> input int Magic=5;//Identification number input double Profit=3.0; CTrade trade; CPositionInfo pos; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- trade.SetExpertMagicNumber(Magic); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(PositionTotal()==0)trade.Buy(0.1); PositionClose(); } //+------------------------------------------------------------------+ int PositionTotal() { int n=0; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(PositionGetSymbol(i)==_Symbol)n++; } return(n); } //+------------------------------------------------------------------+ void PositionClose() { int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; if(pos.Profit()>=Profit) { trade.PositionClose(pos.Identifier()); } } } //+------------------------------------------------------------------+
Спасибо .
вот еще рабочий вариант - ордер на покупку , лот , маждик
//--- MqlTick last_tick={0}; SymbolInfoTick(_Symbol,last_tick); //--- готовим запрос MqlTradeRequest request={0}; request.action=TRADE_ACTION_DEAL; // установка отложенного ордера request.magic=111; // ORDER_MAGIC request.symbol=_Symbol; // инструмент request.volume=0.1; // объем в 0.1 лот request.sl=0; // Stop Loss не указан request.tp=0; // Take Profit не указан //--- сформируем тип ордера request.type=ORDER_TYPE_BUY; // тип ордера //---сформируем цену для отложенного ордера request.price= last_tick.bid; // оттолкнемся от цены Bid // цена для открытия //--- отправим торговый приказ MqlTradeResult result={0}; OrderSend(request,result);
Сергей спасибо .
Я проверил код. Все работает.
Сергей , вобщем осталось причесать код
Оформил в виде скрипта для проверки
Отработал правильно
//+------------------------------------------------------------------+ //| myscript.mq5 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" input long order_magic=55555; #include <Trade\Trade.mqh> #include <Trade\PositionInfo.mqh> input int TakeProfit=150; input int StopLoss=150; input int TradeTime=18; input int t1=7; input int t2=2; input int delta=70; input double lot=0.1; bool cantrade=true;// флаг для разрешения или запрета торговли. double Ask; // здесь будем хранить цену Ask для нового тика (так удобней) double Bid; // здесь будем хранить цену Bid для нового тика (так удобней) CTrade myTrade ; CPositionInfo myPositionInfo ; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- BUY(111 , 0.1); Alert( PositionProfit(111 )); PositionClose(111 ); /* if ( myPositionInfo.SelectByMagic( _Symbol,111 ) ) { // Alert( myPositionInfo.Profit , "111") ; Alert( myPositionInfo.Profit() ) ; } if ( myPositionInfo.SelectByMagic( _Symbol,111 ) ) { // Alert( myPositionInfo.Profit , "111") ; Alert( myPositionInfo.Profit() ) ; PositionClose(111 , 0.1 ); } */ } void PositionClose(int Magic ) { CTrade trade; CPositionInfo pos; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; // if(pos.Profit()>=Profit) // { trade.PositionClose(pos.Identifier()); // } } } void BUY( int magick , double volume ) { MqlTick last_tick={0}; SymbolInfoTick(_Symbol,last_tick); //--- готовим запрос MqlTradeRequest request={0}; request.action=TRADE_ACTION_DEAL; // установка отложенного ордера request.magic=magick; // ORDER_MAGIC // request.order=2111; // Тикет ордера request.symbol=_Symbol; // инструмент request.volume=volume; // объем в 0.1 лот request.sl=0; // Stop Loss не указан request.tp=0; // Take Profit не указан //--- сформируем тип ордера request.type=ORDER_TYPE_BUY; // тип ордера //---сформируем цену для отложенного ордера request.price= last_tick.bid; // оттолкнемся от цены Bid // цена для открытия //--- отправим торговый приказ MqlTradeResult result={0}; OrderSend(request,result); } double PositionProfit(int Magic ) { CTrade trade; CPositionInfo pos; double prof ; prof =0 ; int total=PositionsTotal(); for(int i=0; i<total; i++) { if(!pos.SelectByIndex(i))continue; if(pos.Magic()!=Magic)continue; if(pos.Symbol()!=_Symbol)continue; // if(pos.Profit()>=Profit) // { // trade.PositionClose(pos.Identifier()); // } prof = pos.Profit() ; } return prof ;

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте ,
Как на mql5 открыть позицию buy с маджиком 5 , лотом 0.1 , и закрыть ее если ее профит больше 3 ?