任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 446

 

亲爱的,我需要一些帮助。

我从教程(tradingexpert.mq4)中提取了会计、开仓和平仓订单的代码。 这段代码是为了在一个位置上工作。 我需要有五个位置。

我们以如下方式对代码进行了轻微的修改(修改后的行数为黑体),这样仓位就会适量打开,但当我们反转时,只有一个仓位被关闭,反转的仓位会立即打开。

我怎样才能使它在逆转时关闭所有的头寸,然后只打开相反的头寸?

   // Учёт ордеров
   Symb=Symbol();                               // Название фин.инстр.
   Total=0;                                     // Количество ордеров
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         if (OrderSymbol()!=Symb)continue;      // Не наш фин. инструм
         if (OrderType()>1)                     // Попался отложенный
           {
            Alert("Обнаружен отложенный ордер. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Total++;                               // Счётчик рыночн. орд
         if (Total>5)                           // Было не более одного орд, стало не более пяти
           {
            Alert("Несколько рыночных ордеров. Эксперт не работает.");
            return;                             // Выход из start()
           }
         Ticket=OrderTicket();                  // Номер выбранн. орд.
         Tip   =OrderType();                    // Тип выбранного орд.
         Price =OrderOpenPrice();               // Цена выбранн. орд.
         SL    =OrderStopLoss();                // SL выбранного орд.
         TP    =OrderTakeProfit();              // TP выбранного орд.
         Lot   =OrderLots();                    // Количество лотов
        }
     }
   // Открытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Total < 5 && Opn_B==true)     // Открытых орд. нет +. Было Total < 1, стало Total < 5
        {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         SL=Bid - New_Stop(StopLoss)*Point;     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit)*Point;   // Вычисление TP откр.
         Alert("Попытка открыть Buy. Ожидание ответа..");
         Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Открытие Buy
         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket);
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
   // Закрытие ордеров
   while(true)                                  // Цикл закрытия орд.
     {
      if (Tip==0 && Cls_B==true)                // Открыт ордер Buy..
        {                                       //и есть критерий закр
         Alert("Попытка закрыть Buy ",Ticket,". Ожидание ответа..");
         RefreshRates();                        // Обновление данных
         Ans=OrderClose(Ticket,Lot,Bid,2);      // Закрытие Buy
         if (Ans==true)                         // Получилось :)
           {
            Alert ("Закрыт ордер Buy ",Ticket);
            break;                              // Выход из цикла закр
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }
 
Forexman77:

亲爱的,我需要一些帮助。

我从教程(tradingexpert.mq4)中提取了会计、开仓和平仓订单的代码。 这段代码是为了在一个位置上工作。 我需要有五个位置。

我们以如下方式对代码进行了轻微的修改(修改后的行数为黑体),这样仓位就会适量打开,但当我们反转时,只有一个仓位被关闭,反转的仓位马上就会打开。

我怎样才能使其在逆转时关闭所有头寸,然后只打开相反的头寸?


使Ticket成为一个数组Ticket[5],将所有5张票存储在其中。关闭时,对所有票据进行相应的循环。
 
Vinin:

不能以图书馆的使用水平来认定你是初学者。在看了你的代码后,我需要花两周时间才能搞清楚。如果不是更多的话。所以我认为你不会得到答案。
Vitya,没有必要去理解什么--这个人想让一个 "沙盒"(EA及其库)的全局变量 在另一个 "沙盒"(编译库)中可见。:)))
 

我不是一个程序员,我是一个代码建设者。 所以我建立了这个指标(我看到你可以做一个文本阐述,而不是一个文件t-这就是我将做的,以使它更容易理解。

#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM, EMPTY, 2);
SetIndexBuffer(0,Buffer);
return(0);
}
// -------------------------------------------------------------------

int deinit()
{
return(0);
}
//--------------------------------------------------------------------

int start()
{
int StartBar = Bars - IndicatorCounted() - 1;
for(int i = StartBar; i >= 0; i--)
{
if(TimeDayOfWeek(Time[i]) < TimeDayOfWeek(Time[i+1]))
Buffer[i] = 0;
else
Buffer[i] = Buffer[i+1];
if(Close[i]>Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее и преддыдущее движение растут
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее и преддыдущее движение падают
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]>Close[i+1]&&Close[i+1]<Close[i+2]){//если текущее лвижение растет а предыдущее падает
Buffer[i] += NormalizeDouble((Close[i+1] - Close[i])/Point,0);}
if(Close[i]<Close[i+1]&&Close[i+1]>=Close[i+2]){//если текущее движение падает а предыдущее растет
Buffer[i] += NormalizeDouble((Close[i] - Close[i+1])/Point,0);}
}
return(0);
}
//--------------------------------------------------------------------

它显示了本周内各点的总和和动态--在较小的时间框架内,如果之前的运动从Close[i+2]持续到Close[i+1],则当前的运动Close[i]被加上,如果反对,则被减去。我应该规定,程序应该看到星期五的收盘价,而不是收盘价。 我知道可以用DayOfWeek和5(星期五的数字) 来做,但我怎么才能实际做到呢? 帮助

 
TarasBY:
Vitya,这里没有什么需要整理的--这个人希望一个沙盒(EA及其库)中的全局变量在另一个沙盒(编译库)中可见。:)))

伊戈尔,有点错!在 "沙盒"(已编译的库)中,只有函数和所有的变量在inluder中被声明。在inluder(include文件)中声明的变量在owl中应该是可见的,因为我已经把inluder直接插入到owl中。你不同意吗?
 
Vitek2010:

我不是一个程序员,我是一个代码建设者。 所以我建立了这个指标(我看到你可以做一个文本阐述,而不是一个文件t-这就是我将做的,以使它更容易理解。

它显示了本周内各点的总和和动态--在较小的时间框架内,如果之前的运动从Close[i+2]持续到Close[i+1],则当前的运动Close[i]被加上,如果反对,则被减去。我应该规定,程序应该看到星期五的收盘价,而不是收盘价。 我知道可以用DayOfWeek和5(星期五的数字) 来做,但我怎么才能实际做到呢? 帮助


它是否适合?

//+------------------------------------------------------------------+
//|                                                    Vitek2010.mq4 |
//|                                            Copyright 2014, Vinin |
//|                                                    vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Vinin"
#property link      "vinin@mail.ru"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property  indicator_color1 Lime

//--------------------------------------------------------------------
double Buffer[];
//--------------------------------------------------------------------

int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,2);
   SetIndexBuffer(0,Buffer);
   return(0);
  }
// -------------------------------------------------------------------

int deinit()
  {
   return(0);
  }
//--------------------------------------------------------------------

int start()
  {
   int StartBar=Bars-IndicatorCounted()-1;
   if (StartBar>1) StartBar--;
   
   for(int i=StartBar; i>=0; i--)
     {
      Buffer[i]=Buffer[i+1];
      int pos0=iBarShift(NULL, PERIOD_W1, Time[i]);
      int pos1=iBarShift(NULL, PERIOD_W1, Time[i+1]);
      if (pos0==pos1) 
         Buffer[i]+=MathAbs(Close[i]-Close[i+1]);
      else 
         Buffer[i]=MathAbs(Close[i]-Close[i+1]);
     }
   return(0);
  }
//--------------------------------------------------------------------
 
hoz:

伊戈尔,有点错了!只有函数在沙盒(编译库)中,而所有的变量都在inluder中声明。在inluder(include文件)中声明的变量在owl中应该是可见的,因为我已经把inluder直接插入到owl中。你不同意吗?
那么对编译库的引用与它有什么关系?
 
Vinin:


这样可以吗?

不,它没有。我会解释--你的论坛就像一个希望,最后一个有能力的据点的进步。和插入尺寸--这就是写作 PERIOD_W1的看法,但无论是使用尺寸还是使用固定参考点作为日期,都得不到任何预期的效果。我发了一个关于星期五的具体问题--顺便说一下,你的代码不能编译,因为它说的是'版本'--未知属性,所以如果你不知道如何把 DayOfWeek和5(星期五的数字)放入代码中,其他选项也没有帮助
 
Vitek2010:
不,它没有。我来解释一下--你的论坛就像希望最后一个有能力的据点的程序。和插入尺寸--这就是它看到的写作 PERIOD_W1,但无论是使用尺寸还是使用固定基准作为日期,都没有得到任何理想的效果。我发了一个关于星期五的具体问题--顺便说一下,你的代码不能编译,因为它说的是'版本'--未知属性,所以如果你不知道如何把 DayOfWeek和5(星期五的数字)放入代码中,其他选项也没有帮助

TimeDayOfWeek(Time[i])没有指定Time[i],而是指定一个格式为D'2014.01.27'的具体日期。

如果你需要确定今天是什么日子,只需调用 DayOfWeek()。

 
evillive:

在TimeDayOfWeek(Time[i]),你没有设置Time[i],而是设置一个格式为D'2014.01.27'的具体日期。

如果你想确定今天是什么日子,只需调用 DayOfWeek()

你从哪里读到的TimeDayOfWeek()(在例子中)?:)))
原因: