[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 449

 
ilunga:

不,它只意味着这些数据与一段历史相匹配。

例如,你可以手动输入。或者从一个文本文件中写出来。或者你可以从计算器上得到它。


因为即使输入一些条件数据 "1.25 1.16 1.73 1.35",我们也可能得到多年前某些货币的历史。但这并不意味着我们已经设置了一个数组时间序列

对原剧本进行了一些调整。

1.我只复制了5个最新的开盘价到自定义数组。

2.通过所有5个复制的开盘价计算得到的自定义数组。

/+------------------------------------------------------------------------------------------+
//|                                                                ArrayGetAsSeries_плюс.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                           //функция start
  {                                                   //начало start
   double Timestart=GetTickCount();                   //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения эксперта 
   double array1[];                                   //объявляем массив-приемник (массив, куда будут скопированы данные)
   int element=ArrayCopy(array1,Open,0,0,5);          //копируем данные по максимальным ценам в пользовательский массив (начиная с 1-о бара, а не с нулевого)
   int size=ArraySize(array1);                        //устанавливаем количество элементов массива array1
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopy(array1[],Open,0,0,WHOLE_ARRAY) вернула: ",element,
           "\nФункция ArraySize(array1) вернула: ",size,
           "\nЗначение цены открытия бара №0 равно ",array1[0],"; Время цены открытия бара №0: ",TimeToStr(iTime(NULL,0,0),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №1 равно ",array1[1],"; Время цены открытия бара №1: ",TimeToStr(iTime(NULL,0,1),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №2 равно ",array1[2],"; Время цены открытия бара №2: ",TimeToStr(iTime(NULL,0,2),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №3 равно ",array1[3],"; Время цены открытия бара №3: ",TimeToStr(iTime(NULL,0,3),TIME_DATE|TIME_MINUTES),
           "\nЗначение цены открытия бара №4 равно ",array1[4],"; Время цены открытия бара №4: ",TimeToStr(iTime(NULL,0,4),TIME_DATE|TIME_MINUTES),
           "\nФункция ArrayGetAsSeries(array1) вернула: ",ArrayGetAsSeries(array1),
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",MathFloor((GetTickCount()-Timestart)/1000),
           " секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000," миллисекунд");//печать 
           //сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

这是我得到的东西。


从图中可以看出,开盘价是按相反的顺序索引的(由条形开盘价的数量(按升序排列)和条形开盘价的时间(按降序排列)证明),也就是说,该数组被组织成一个数组-时间序列。

但是ArrayGetAsSeries函数仍然返回0(false),这意味着:用户数组没有被组织成一个数组-时间序列。

非常恳切地要求澄清

问题:如何解释这个问题?

P.S. 谢谢你回答我的问题

 
7777877:

对原剧本进行了一些调整。

1.我只复制了最后5个开盘价到一个自定义数组中。

2.Rasprocessed所产生的自定义数组由所有5个复制的开盘价进行处理。

这是我得到的东西。

从图中你可以看到,开盘价是按相反的顺序索引的(由条形开盘价的数量(按升序排列)和条形开盘价的时间(按降序排列)证明),也就是说,该数组被组织成一个数组-时间序列。

但是ArrayGetAsSeries函数仍然返回0(false),这意味着:用户数组没有被组织成一个数组-时间序列。

请说明

问题:如何解释?

P.S. 谢谢你回答我的问题。

你是否尝试过使用

boolArraySetAsSeries(空白数组[], 傻瓜式设置)
设置一个数组的索引方向。设置TRUE的索引方向为逆序,即最后一个元素的索引为零值为FALSE时,设置正常的索引方向。该函数返回之前的状态。
参数。
阵列[]-要设置的数字数组。
设置-阵列的索引方向。
 
Vinin:

你是否尝试过以下功能

boolArraySetAsSeries(空白数组[], 傻瓜式设置)
设置数组的索引方向。设置TRUE将索引方向设置为逆序,即最后一个元素的索引为零值为FALSE时,设置正常的索引方向。该函数返回之前的状态。
参数。
阵列[]-要设置的数字数组。
设置-阵列的索引方向。

我在这个阶段的目标是了解某个特定的函数是如何工作的,在这个特定的案例中,ArrayGetAsSeries函数 是如何工作的。我知道我可以使用ArraySetAsSeries 函数,参数为set=true,这样可以强行设置索引,就像在数组-时间序列中一样 但我想知道,为什么在我的案例中 尽管数组看起来像时间序列(即像时间序列一样的索引),但ArrayGetAsSeries函数 却返回0。
 
Sepulca:


i_maTF == Period() ??????

i_maPeriod取一个合理的值?

那么,也许i_maShiftByPrice有什么问题呢?

很难说得更精确。

它所输出的信息是不正确的。以下是完整的代码。

#property copyright "hoz"
#property link      ""
#include <stderror.mqh>
#include <stdlib.mqh>

extern string  h1 = "основные параметры машки";
extern int     i_maTF = 0;
extern int     i_maPeriod = 50;
extern int     i_maShiftByPrice = 0;
extern int     i_maMethod = 0;
extern int     i_maPrice = 0;
extern int     i_shiftBarsBack1 = 1;                        // Первое значение shift
extern int     i_shiftBarsBack2 = 49;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Значения цены и времени в точках А и В гипотенузы";
double         price1,                                      // Цена в точке А
               price2,                                      // Цена в точке В
               time1,                                       // Время в точке А
               time2,                                       // Время в точке В
string         h4 = "Переменые массивов цены и времени в точках А и В гипотенузы";
double         varsPrice1[100],                             // Буфер для цены в точке А
               varsPrice2[100],                             // Буфер для цены в точке В
               varsTime1[100],                              // Буфер для времени в точке А
               varsTime2[100],                              // Буфер для времени в точке В

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Red
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {

// -------------- блок деинициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
   int i, countedBars = IndicatorCounted();
   int limit = Bars - countedBars;
   if (limit > 100) limit = 100;
        
   for(i = limit - 1;i > 0;i--)
    {
      price1 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i);       // Цена в точке А
      price2 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i);       // Цена в точке В
      time1 = iTime(Symbol(),Period(),i_shiftBarsBack1 + i - 1);                                               // Время в точке А
      time2 = iTime(Symbol(),Period(),i_shiftBarsBack2 + i - 1);                                               // Время в точке В
    
      Print("i = ", i," i_maTF = ", i_maTF, " i_maPeriod = ", i_maPeriod," i_maShiftByPrice ", i_maShiftByPrice, " i_maMethod = ", i_maMethod," i_maPrice = ", i_maPrice, " i_shiftBarsBack1 = ", i_shiftBarsBack1);
      string error = GetMyLastError2();
      
  //    Print("vars", DoubleToStr(price1,5));
    //  Print("vars", DoubleToStr(varsPrice1[i],5));
      
      varsPrice1[i] = price1;                                                                        // Массив цен в точке А
      varsPrice2[i] = price2;                                                                        // Массив цен в точке В
      varsTime1[i] = time1;                                                                          // Массив времени в точке А
      varsTime2[i] = time2;                                                                          // Массив времени в точке В
    
   
  //    Print("vars", DoubleToStr(varsPrice1[i],5));

            
      double d = (MathAbs(varsTime1[i] - varsTime2[i]))*1.0;
      double h = (MathAbs(varsPrice1[i] - varsPrice2[i]));
      
  //    Print("d = ", d, " h = ", h);
      
      double angle = h/d;
      varsAngle[i] = angle;
    }
   return(0);
  }
  
string GetMyLastError2()
  {
    int err = GetLastError();
    string serr = ErrorDescription(err);
    return(serr);
  }

/* //+------------------------------------------------------------------+
//|                  Функция рассчёта тангенса угла                  |
//+------------------------------------------------------------------+
double TanA(double d, double h)
 {
   double angle = h/d;
   
  return(0);
 }
// -------------- блок деинициализации закончен ---------------------- */

专家顾问的日志显示了这一点。







14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 25 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 24 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 23 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 22 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 21 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 20 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 19 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 18 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 17 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 16 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 15 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 14 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 13 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 12 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 11 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 10 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 9 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 8 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 7 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 6 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 5 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 4 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 3 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 2 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7
14:50:36 2010.08.11 12:30  AngleByTg GBPUSD,M15: i = 1 i_maTF = 50 i_maPeriod = 0 i_maShiftByPrice 0 i_maMethod = 0 i_maPrice = 2 i_shiftBarsBack1 = 7

正如你所看到的,i_maTF、i_maPeriodi_maPrice 变量不是我初始化的。怎么了?

 
hoz:

输出错误的信息。以下是完整的代码。

专家日志显示了这一点。

你可以看到,变量i_maTF、i_maPeriodi_maPrice 与我初始化的不一样。怎么了?

我想知道,如果你提交的代码不能编译,你是如何设法在日志中得到一些东西的?

啊,如果你编译它,就不会有任何奇怪的现象。

附加的文件:
hoz_1.mq4  4 kb
 
TarasBY:

我想知道,如果你提出的代码不能编译,你是如何设法在日志中得到任何东西的?

啊,如果你编译它,你就不会得到任何奇怪的东西。

我总是正常编译。

我已经清理了代码中多余的打印机和变量,以免让人感到困惑。但我没有在下面删除它们,所以它没有编译。以下是编译后的完整代码。

//+------------------------------------------------------------------+
//|                                                    AngleByTg.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""
#include <stderror.mqh>
#include <stdlib.mqh>

extern string  h1 = "основные параметры машки";
extern int     i_maTF = 0;
extern int     i_maPeriod = 50;
extern int     i_maShiftByPrice = 0;
extern int     i_maMethod = 0;
extern int     i_maPrice = 0;
extern int     i_shiftBarsBack1 = 1;                        // Первое значение shift
extern int     i_shiftBarsBack2 = 49;                       // Второе значение shift
extern string  h2 = "===============================";

string         h3 = "Значения цены и времени в точках А и В гипотенузы";
double         price1,                                      // Цена в точке А
               price2,                                      // Цена в точке В
               time1,                                       // Время в точке А
               time2,                                       // Время в точке В
               angle;                                       // Значение возвращаемой тангенсом
string         h4 = "Переменые массивов цены и времени в точках А и В гипотенузы";
double         varsPrice1[100],                             // Буфер для цены в точке А
               varsPrice2[100],                             // Буфер для цены в точке В
               varsTime1[100],                              // Буфер для времени в точке А
               varsTime2[100],                              // Буфер для времени в точке В
               varsAngle[100];                              // Буфер для хранения значение угла

#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Red
//#property indicator_minimum -90
//#property indicator_maximum 90
//+------------------------------------------------------------------+
//|               Функция инициализации индикатора                   |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
   SetIndexBuffer(0,varsAngle);                          // Связываем массив значений угла с буфером
   SetIndexStyle(0,DRAW_HISTOGRAM); 
   
// -------------- блок инициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|              Функция деинициализации индикатора                  |
//+------------------------------------------------------------------+
int deinit()
  {

// -------------- блок деинициализации закончен ----------------------
   return(0);
  }
//+------------------------------------------------------------------+
//|                  Функция итерации эксперта                       |
//+------------------------------------------------------------------+
int start()
  {
 //   if (!isNewBar())
 //   return(0);
    
   int i, countedBars = IndicatorCounted();
   int limit = Bars - countedBars;
   if (limit > 100) limit = 100;
        
   for(i = limit - 1;i > 0;i--)
    {
      price1 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i);       // Цена в точке А
      price2 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i);       // Цена в точке В
      time1 = iTime(Symbol(),Period(),i_shiftBarsBack1 + i - 1);                                               // Время в точке А
      time2 = iTime(Symbol(),Period(),i_shiftBarsBack2 + i - 1);                                               // Время в точке В
    
      Print("i = ", i," i_maTF = ", i_maTF, " i_maPeriod = ", i_maPeriod," i_maShiftByPrice ", i_maShiftByPrice, " i_maMethod = ", i_maMethod," i_maPrice = ", i_maPrice, " i_shiftBarsBack1 = ", i_shiftBarsBack1);
      string error = GetMyLastError2();
      
      
//      Print("i = ", i," time1 = ", time1, " price1 = ", price1);
  //    Print("vars", DoubleToStr(price1,5));
    //  Print("vars", DoubleToStr(varsPrice1[i],5));
      
      varsPrice1[i] = price1;                                                                        // Массив цен в точке А
      varsPrice2[i] = price2;                                                                        // Массив цен в точке В
      varsTime1[i] = time1;                                                                          // Массив времени в точке А
      varsTime2[i] = time2;                                                                          // Массив времени в точке В
    
   
  //    Print("vars", DoubleToStr(varsPrice1[i],5));
    
      //Print("i = ", i," time1 = ", time1, " price1 = ", price1);
    //  Print("i = ", i," time2 = ", time2, " price2 = ", price2);
  //    Print("i = ", i," varsTime1[i] = ", varsTime1[i], " varsPrice1[i] = ", varsPrice1[i]);
     // Print("i = ", i," varsTime2[i] = ", varsTime2[i], " varsPrice2[i] = ", varsPrice2[i]);
            
      double d = (MathAbs(varsTime1[i] - varsTime2[i]))*1.0;
      double h = (MathAbs(varsPrice1[i] - varsPrice2[i]));
      
  //    Print("d = ", d, " h = ", h);
      
      double angle = h/d;
      varsAngle[i] = angle;
      
 //     Print("i = ", i," varsAngle[i] = ", varsAngle[i]);
    }
   return(0);
  }
  
string GetMyLastError2()
  {
    int err = GetLastError();
    string serr = ErrorDescription(err);
    return(serr);
  }

/* //+------------------------------------------------------------------+
//|                  Функция рассчёта тангенса угла                  |
//+------------------------------------------------------------------+
double TanA(double d, double h)
 {
   double angle = h/d;
   
  return(0);
 }
// -------------- блок деинициализации закончен ---------------------- */
附加的文件:
anglebytg.mq4  6 kb
 

请帮助我们!如何让EA在开新单时关闭旧单?在策略测试器中工作正常,但在真实账户中,由于某些原因,当我打开一个新的账户时,旧的账户会离开????????。我在编程方面完全是个零基础((()

//---- input parameters
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo

//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO


Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам


Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам


//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {

int total=OrdersTotal();

for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--


if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {

if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();

}

return(0);
}
}

//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;



if ( flag &&

Open[period_1]>Open[period_2] && //----вход в рынок по условию---


OrdersTotal()<2 && //-----ограничения чемпионата------

AccountEquity()>200 &&

IsTradeAllowed()) {

if (mn<200) {

ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);


}


else {

ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);

}


RefreshRates();

if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }

} //-- Exit ---

return(0); }


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

或者再写一个EA,其工作原理是:1已开仓,2已开仓-1已平仓,3已开仓-2已平仓,等等。帮助真的,真的需要它!!!。
 
al7bar:

请帮助我们!如何让EA在开新单时关闭旧单?在策略测试器中工作正常,但在真实账户中,由于某些原因,当我打开一个新的账户时,旧的账户会离开????????。我对编程完全没有概念()!

//---- input parameters
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;

替换

if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

 OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates(); 

 }

if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------

 OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5*x); RefreshRates(); 

 }
 
7777877:
我在这个阶段的目标是了解这个或那个函数是如何工作的,在这个特定的案例中,ArrayGetAsSeries函数是如何工作的。我知道你可以使用ArraySetAsSeries函数,参数set=true,这样就可以强行设置索引,就像在数组-时间序列中一样 但我想知道,为什么在我的案例中 尽管数组看起来像时间序列(即像时间序列一样的索引),但ArrayGetAsSeries函数 却返回0。

正是因为它只作为一个时间序列进行解释。

这只是你的个人意见。而如果你把数字1、2、1.2、2.1放在里面,你就会得到1927年猪肉的时间序列(数字是有条件的)。但这并不能使数组成为一个时间序列--你需要用函数明确指定它

 
TarasBY:

我想知道,如果你提出的代码不能编译,你是如何设法在日志中得到任何东西的?

啊,如果你编译它,你就不会得到任何奇怪的东西。

我给了你上面的原始版本,当然可以编译。我有一个问题。你为什么要更换线路。

      price1 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack1+i);       // Цена в точке А
      price2 = iMA(Symbol(),i_maTF,i_maPeriod,i_maShiftByPrice,i_maMethod,i_maPrice,i_shiftBarsBack2+i);       // Цена в точке В

i_maTFPeriod() 。我错了吗?

文件中说,在计算移动平均线

double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

时间框架,即我的变量i_maTF Period.可以是图表中的一个时期。0表示当前图形的周期。)我指定的是0,没有 提到i_maPeriod 请澄清一下!