Help , please

 
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 ; 
Причина обращения: