Подправить код новичку - страница 2

 
Vladimir Karputov:

Например в коде Close all positions есть одна из функций. Если поискать по моим кодам, то обнаружится и вторая функция.

Похоже на правду?

//+------------------------------------------------------------------+
//|                                                      Test EA.mq5 |
//+------------------------------------------------------------------+
#property version   "1.000"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\AccountInfo.mqh>
CAccountInfo   m_account;                    // account info wrapper
//--- input parameters
double InpStepEquity=100;                    // Step equity
//---
double m_start_equity=0.0;
int m_magic = 29448;
 CPositionInfo  m_position;                    // trading object
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CalculateAllPositions()==0)
      m_start_equity=m_account.Equity();

   if(m_account.Equity()>=m_start_equity+InpStepEquity)
     {
      CloseAllPositions();
      return;
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Close all positions                                              |
//+------------------------------------------------------------------+
void CloseAllPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--);// returns the number of current positions
     
  }
 
  //+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
int CalculateAllPositions()
  {
   int total=0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
            total++;
//---
   return(total);
  }
 
Sprut112:

Похоже на правду?

Уникальный идентификатор эксперта должен быть ulong. Пример:

input ulong    m_magic           = 166399440;// magic number

И с функцией CloseAllPositions намудрили.

Пример CloseAllPositions есть тут: GalacticExplosion.

 
Sprut112:

Похоже на правду?

Ты, когда пишешь строки кода (все равно, сам или копируешь откуда-то) должен понимать, зачем нужен КАЖДЫЙ символ, который ты написал. Простое "механическое" копирование до добра не доведет.

При копировании - всегда надо спрашивать себя - "зачем тут вот эта конструкция, вот это ключевое слово, вот этот символ".

В приведенном фрагменте функция CloseAllPositions() просто перебирает позиции, совершенно ничего с ними не делая.

 
Georgiy Merts:

Ты, когда пишешь строки кода (все равно, сам или копируешь откуда-то) должен понимать, зачем нужен КАЖДЫЙ символ, который ты написал. Простое "механическое" копирование до добра не доведет.

При копировании - всегда надо спрашивать себя - "зачем тут вот эта конструкция, вот это ключевое слово, вот этот символ".

В приведенном фрагменте функция CloseAllPositions() просто перебирает позиции, совершенно ничего с ними не делая.

Да, непросто все . Ладно, спасибо
 
Georgiy Merts:

Ты, когда пишешь строки кода (все равно, сам или копируешь откуда-то) должен понимать, зачем нужен КАЖДЫЙ символ, который ты написал. Простое "механическое" копирование до добра не доведет.

При копировании - всегда надо спрашивать себя - "зачем тут вот эта конструкция, вот это ключевое слово, вот этот символ".

В приведенном фрагменте функция CloseAllPositions() просто перебирает позиции, совершенно ничего с ними не делая.

Можно разместить в CodeBase

//+------------------------------------------------------------------+
//|                                                      Test EA.mq5 |
//+------------------------------------------------------------------+
#property version   "1.000"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\AccountInfo.mqh>
#include <Trade\Trade.mqh>
CAccountInfo   m_account;                    // account info wrapper
CSymbolInfo    m_symbol;
CTrade         m_trade; 
CPositionInfo  m_position;                    // trading object 
//--- input parameters
input double InpStepEquity= 100;                    // Step equity
//---
double m_start_equity     = 0.0;
input ulong m_magic       = 0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CalculateAllPositions()==0)
      m_start_equity=m_account.Equity();

   if(m_account.Equity()>=m_start_equity+InpStepEquity)
     {
      CloseAllPositions();
      return;
     }
  }
//+------------------------------------------------------------------+
//| Close all positions                                              |
//+------------------------------------------------------------------+
void CloseAllPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of current positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
  }
//+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
int CalculateAllPositions()
  {
   int total=0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==Symbol() && m_position.Magic()==m_magic)
            total++;
//---
   return(total);
  }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

в  таком виде?

 
Sprut112:

Можно разместить в CodeBase

в  таком виде?

А Вы компилировать пробовали?


А где оформленная шапка?

Пример шапки:

//+------------------------------------------------------------------+
//|                         iIndicators(barabashkakvn's edition).mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
 
Sprut112:

Можно разместить в CodeBase

в  таком виде?

Зачем ?

Ты считаешь, что это очень нужный код ?

Написал, отлично, теперь используй его !

А в Кодобазе имеет смысл размещать что-то новое, особенное, чего не было раньше.

 
Vladimir Karputov:

А Вы компилировать пробовали?


А где оформленная шапка?

Пример шапки:

Да, шапку обязательно сделаю

 
Georgiy Merts:

Зачем ?

Ты считаешь, что это очень нужный код ?

Написал, отлично, теперь используй его !

А в Кодобазе имеет смысл размещать что-то новое, особенное, чего не было раньше.

Ну по-моему вполне нужная вещь. По профиту много закрывашек, а по Эквити не очень, да еще и с шагом...

 
Sprut112:

Ну по-моему вполне нужная вещь. По профиту много закрывашек, а по Эквити не очень, да еще и с шагом...

Код работать не будет. Выше правильно советовали:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Подправить код новичку

Georgiy Merts, 2018.12.17 14:20

Ты, когда пишешь строки кода (все равно, сам или копируешь откуда-то) должен понимать, зачем нужен КАЖДЫЙ символ, который ты написал. Простое "механическое" копирование до добра не доведет.

При копировании - всегда надо спрашивать себя - "зачем тут вот эта конструкция, вот это ключевое слово, вот этот символ".

***


Изучайте первоисточники. Думайте.

Причина обращения: