Торговля советником на двух парах одновременно - страница 2

 
Vladimir Karputov:
 
Vladimir Zaharov:

блин,смотри,есть евро\доллар и фунт долар.Мне нужно чтобы советник открывал по ним 2 сделки одновременно,по евро\доллару покупка,по фунту продажа,при этом ставится тэйк 10п и стоп 20п

 
Vladimir Zaharov:

блин,смотри,есть евро\доллар и фунт долар.Мне нужно чтобы советник открывал по ним 2 сделки одновременно,по евро\доллару покупка,по фунту продажа,при этом ставится тэйк 10п и стоп 20п

Вы советник запустили? Что получилось? И слова подбирайте, пожалуйста.
 
Vladimir Karputov:
Вы советник запустили? Что получилось? И слова подбирайте, пожалуйста.
извините,не хотел никак оскорбить
 
Vladimir Zaharov:
извините,не хотел никак оскорбить
Если нужно просто открывать сразу две позиции, то это даже легче. Сейчас будет версия 1.002...
 
Vladimir Zaharov:
извините,не хотел никак оскорбить

пока нет

 
Vladimir Zaharov:

пока нет

не получается
 

Версия 1.002: открываем две позиции, пока без стопов:

Файлы:
 

Версия 1.003 - две позиции, с уровнями Take Profit и Stop Loss:

//+------------------------------------------------------------------+
//|                                                   CtradeTest.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.003"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
//---
input string first="EURUSD";
input ushort   InpTakeProfit_1   =10;        // Take Profit Symbol #1 (in pips)
input ushort   InpStopLoss_1     =20;        // Stop Loss Symbol #1  (in pips)
input string second="GBPUSD";
input ushort   InpTakeProfit_2   =10;        // Take Profit Symbol #2 (in pips)
input ushort   InpStopLoss_2     =20;        // Stop Loss Symbol #2  (in pips)
//---
ulong          m_magic=15489;                // magic number

CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol_1;                   // symbol info object for symbol "first"
CSymbolInfo    m_symbol_2;                   // symbol info object for symbol "second"

double         ExtTakeProfit_1   =0.0;
double         ExtStopLoss_1     =0.0;
double         ExtTakeProfit_2   =0.0;
double         ExtStopLoss_2     =0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   m_symbol_1.Name(first);
   m_symbol_1.Refresh();
   m_symbol_2.Name(second);
   m_symbol_2.Refresh();

   if(!RefreshRates())
     {
      Print("Error RefreshRates.",
            m_symbol_1.Name()," Bid=",DoubleToString(m_symbol_1.Bid(),Digits()),
            m_symbol_1.Name()," Ask=",DoubleToString(m_symbol_1.Ask(),Digits()),
            m_symbol_2.Name()," Bid=",DoubleToString(m_symbol_2.Bid(),Digits()),
            m_symbol_2.Name()," Ask=",DoubleToString(m_symbol_2.Ask(),Digits()));
      return(INIT_FAILED);
     }
   m_trade.SetExpertMagicNumber(m_magic);

//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol_1.Digits()==3 || m_symbol_1.Digits()==5)
      digits_adjust=10;
   ExtTakeProfit_1   = InpTakeProfit_1 * digits_adjust * m_symbol_1.Point();
   ExtStopLoss_1     = InpStopLoss_1   * digits_adjust * m_symbol_1.Point();

   digits_adjust=1;
   if(m_symbol_2.Digits()==3 || m_symbol_2.Digits()==5)
      digits_adjust=10;
   ExtTakeProfit_2   =InpTakeProfit_2  * digits_adjust*m_symbol_2.Point();
   ExtStopLoss_2     =InpStopLoss_2    * digits_adjust*m_symbol_2.Point();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;

//--- count  positions
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if((m_position.Symbol()==m_symbol_1.Name() || m_position.Symbol()==m_symbol_2.Name()) &&
            m_position.Magic()==m_magic)
            total++;
   if(total==0)
     {
      m_trade.Buy(0.01,m_symbol_1.Name(),m_symbol_1.Ask(),
                  m_symbol_1.Bid()-ExtStopLoss_1,
                  m_symbol_1.Bid()+ExtTakeProfit_1);
      m_trade.Sell(0.01,m_symbol_2.Name(),m_symbol_2.Bid(),
                   m_symbol_2.Ask()+ExtStopLoss_2,
                   m_symbol_2.Ask()-ExtTakeProfit_2);
     }

   double bid_1=m_symbol_1.Bid();
   double bid_2=m_symbol_2.Bid();
   Comment(first," Bid: ",DoubleToString(bid_1,m_symbol_1.Digits()),"\n",
           second," Bid: ",DoubleToString(bid_2,m_symbol_2.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol_1.RefreshRates() || !m_symbol_2.RefreshRates())
      return(false);
//--- protection against the return value of "zero"
   if(m_symbol_1.Ask()==0 || m_symbol_1.Bid()==0 || m_symbol_2.Ask()==0 || m_symbol_2.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

df 

Файлы:
CtradeTest.mq5  10 kb
 
Vladimir Karputov:

Версия 1.003 - две позиции, с уровнями Take Profit и Stop Loss:

//+------------------------------------------------------------------+
//|                                                   CtradeTest.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.003"
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
//---
input string first="EURUSD";
input ushort   InpTakeProfit_1   =10;        // Take Profit Symbol #1 (in pips)
input ushort   InpStopLoss_1     =20;        // Stop Loss Symbol #1  (in pips)
input string second="GBPUSD";
input ushort   InpTakeProfit_2   =10;        // Take Profit Symbol #2 (in pips)
input ushort   InpStopLoss_2     =20;        // Stop Loss Symbol #2  (in pips)
//---
ulong          m_magic=15489;                // magic number

CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol_1;                   // symbol info object for symbol "first"
CSymbolInfo    m_symbol_2;                   // symbol info object for symbol "second"

double         ExtTakeProfit_1   =0.0;
double         ExtStopLoss_1     =0.0;
double         ExtTakeProfit_2   =0.0;
double         ExtStopLoss_2     =0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   m_symbol_1.Name(first);
   m_symbol_1.Refresh();
   m_symbol_2.Name(second);
   m_symbol_2.Refresh();

   if(!RefreshRates())
     {
      Print("Error RefreshRates.",
            m_symbol_1.Name()," Bid=",DoubleToString(m_symbol_1.Bid(),Digits()),
            m_symbol_1.Name()," Ask=",DoubleToString(m_symbol_1.Ask(),Digits()),
            m_symbol_2.Name()," Bid=",DoubleToString(m_symbol_2.Bid(),Digits()),
            m_symbol_2.Name()," Ask=",DoubleToString(m_symbol_2.Ask(),Digits()));
      return(INIT_FAILED);
     }
   m_trade.SetExpertMagicNumber(m_magic);

//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol_1.Digits()==3 || m_symbol_1.Digits()==5)
      digits_adjust=10;
   ExtTakeProfit_1   = InpTakeProfit_1 * digits_adjust * m_symbol_1.Point();
   ExtStopLoss_1     = InpStopLoss_1   * digits_adjust * m_symbol_1.Point();

   digits_adjust=1;
   if(m_symbol_2.Digits()==3 || m_symbol_2.Digits()==5)
      digits_adjust=10;
   ExtTakeProfit_2   =InpTakeProfit_2  * digits_adjust*m_symbol_2.Point();
   ExtStopLoss_2     =InpStopLoss_2    * digits_adjust*m_symbol_2.Point();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(!RefreshRates())
      return;

//--- count  positions
   int total=0;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if((m_position.Symbol()==m_symbol_1.Name() || m_position.Symbol()==m_symbol_2.Name()) &&
            m_position.Magic()==m_magic)
            total++;
   if(total==0)
     {
      m_trade.Buy(0.01,m_symbol_1.Name(),m_symbol_1.Ask(),
                  m_symbol_1.Bid()-ExtStopLoss_1,
                  m_symbol_1.Bid()+ExtTakeProfit_1);
      m_trade.Sell(0.01,m_symbol_2.Name(),m_symbol_2.Bid(),
                   m_symbol_2.Ask()+ExtStopLoss_2,
                   m_symbol_2.Ask()-ExtTakeProfit_2);
     }

   double bid_1=m_symbol_1.Bid();
   double bid_2=m_symbol_2.Bid();
   Comment(first," Bid: ",DoubleToString(bid_1,m_symbol_1.Digits()),"\n",
           second," Bid: ",DoubleToString(bid_2,m_symbol_2.Digits()));
  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates()
  {
//--- refresh rates
   if(!m_symbol_1.RefreshRates() || !m_symbol_2.RefreshRates())
      return(false);
//--- protection against the return value of "zero"
   if(m_symbol_1.Ask()==0 || m_symbol_1.Bid()==0 || m_symbol_2.Ask()==0 || m_symbol_2.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+

df 

Владимир,в  мт5 работает,но проблема в том что у меня мт4 и 4значные котировки
Причина обращения: