初学者的问题 MQL5 MT5 MetaTrader 5 - 页 752

 
对不起,我的问题很简单,我如何关闭一个未结头寸? mql4有OrderClose()函数,但如何关闭?
 
RogozaIV:
对不起,我的问题很简单,我如何关闭一个未结头寸? mql4有OrderClose()函数,但我如何在这里做?

在mql5中,你必须打开一个相反的位置。 它可以在终端历史的标签中清楚地看到。最简单的方法是使用标准库中的 CTrade 类。
 
谢谢你,Alexey Volchanskiy!
 
你能告诉我哪里可以通过MT5交易加密货币吗?经纪人、交易所?我找到了MT4,但MT5似乎并不存在。
 

先生们,请告诉我错误在哪里。

我正在准备一个在EA中调用的指标。

我想从指标中发送一个缓冲区。

其结果是绑定在条形图上的int值。

任务是将一个二维数组从指标中传递给专家顾问,我不知道该怎么做。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

int per[];

int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS); //также пробовал INDICATOR_DATA и INDICATOR_COLOR_INDEX
...

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
{
      for(int b=1; b<Bmax; b++) //отбор по x
        {
         for(int p=1; p<Pmax; p++) // отбор по y
           {
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)
            {
             per[b]=p;
            }
           }
        }
 }

所以我在EA中称它为

int OnInit()
  {
//--- create timer
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); 
   ResetLastError(); 
   MA_handle=iCustom(NULL,0,"Topqw",0,1); 

   Print("MA_handle = ",MA_handle,"  error = ",GetLastError()); 
...

void OnTick()
//void OnTimer()
  {
//--- 
int copy=CopyBuffer(MA_handle,0,0,1000,Label1Buffer); 
   Print("copy =",copy," ",Label1Buffer[999]);//

 
Top2n:

先生们,请告诉我错误在哪里。

我正在准备一个在EA中调用的指标。

我想从指标中发送一个缓冲区。

其结果是绑定在条形图上的int值。

任务是将一个二维数组从指标中传递给专家顾问,我不知道该怎么做。

我在EA中叫它



1.请记住,在INDICATOR中,索引为 "0 "的默认指标缓冲区对应于图表上最左边的柱子。

2.专家顾问没有 "SetIndexBuffer "命令。

3.iCustom正在创建一个自定义指标,而不是一个缓冲请求(因此,所有东西都应该明确写出来,而不是",0,1")。在你的情况下,你可以使用这种形式

//--- create handle of the indicator Topqw
   ResetLastError();
   handle_Topqw=iCustom(Symbol(),Period(),"Topqw",PRICE_CLOSE);
//--- if the handle is not created 
   if(handle_Topqw==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the Topqw indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }

4.CopyBuffer似乎写得很正确。

5.二维数组不能传递--做两个数组指示器的缓冲区。

 
Vladimir Karputov:


1.请记住,在INDICATOR中,默认情况下,索引为 "0 "的指标缓冲区对应于图表上最左边的柱子。

2.EA中没有 "SetIndexBuffer "命令。

3.iCustom正在创建一个自定义指标,而不是一个缓冲请求(因此所有的东西都应该明确写出来,而不是",0,1")。在你的情况下,你可以使用这种形式

4.CopyBuffer似乎写得很正确。

5.你不能传递一个二维数组--做两个数组指示器的缓冲区。


谢谢你的指正,但我不明白,如果我明确设置为转移数组,是如何正规化的? 我在哪里指定需要提取两个数组?

MA_handle=iCustom(Symbol(),Period(),"TopFidCounselor",per,bar); per,bar - же массивы, а данные должны быть imput,
в индикаторе записываю в массивы
   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,bar,INDICATOR_CALCULATIONS);

если я сделаю такую запись
int OnCalculate(
...
  {
//--------------------------------------------------------------
  for ( int i = 0; i < rates_total; i ++ ) per[i] = price[i];  -
//--------------------------------------------------------------
ТО СОВЕТНИК РАБОТАЕТ БЕЗ ОШИБКИ
а если такую
//----------------------------------------------------------------
      for(int b=1; b<200; b++) //отбор по х			-
        {							-
         for(int p=1; p<200; p++) // отбор по у			-
           {							-
            if(arrayZ[6][p][b]>0||arrayZ[6][p][b]<0)		-
            {							-
             per[b]=p;						-
             bar[b]=b;						-
            }							-
           }							-
        }							-
//----------------------------------------------------------------
ТО ОШИБКА код 4002

我已经看完了IndicatorCreate(),能不能请你告诉我怎么做,否则我得花几个星期才能弄明白,而我已经没有多少时间来完成这个思想区块 了。我马上要去邛崃,和蜜蜂一起过夏天,所以我想在出发前检查一下这个想法,这样我就不会有任何幻想了。
 

我在INDICATOR_CALCULATIONS 指标中使用的内容是否正确

   SetIndexBuffer(0,per,INDICATOR_CALCULATIONS);
 

错误4002已经解决。

只是不知道该把要提取的数组写在哪里?

   int copy=CopyBuffer(MA_handle,0,0,bars,per); //per?
 
Top2n:

错误4002已经解决。

只是不知道该把要提取的数组写在哪里?


数组per 是在EA中声明的,在你做复制的过程中。它必须是一个动态数组(声明为[]-不指定维度)。