[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 418

 
sss2019:


谢谢你。所以M1期对应的是值1,M5期对应的是值5,所以原来H1期对应的是值60,H4期对应的是值240对吗?


是的,这是正确的。

PERIOD_M1 1 1 минута
PERIOD_M5 5 5 минут
PERIOD_M15 15 15 минут
PERIOD_M30 30 30 минут
PERIOD_H1 60 1 час
PERIOD_H4 240 4 часа
PERIOD_D1 1440 1 день
PERIOD_W1 10080 1 неделя
PERIOD_MN1 43200 1 месяц
0 (ноль) 0 Период текущего графика

 

你好!

请帮助我理解。我想写一个简单的指标,但不知为何它给出的是空值。

在我看来,错误似乎就在这个地方的某个地方

ExtVolumesBuffer[i]=dVolume;


因为这个操作在ExtVolumesBuffer数组中的字段并没有改变任何东西。

我明白,在某处我犯了一个错误,但我不明白在哪里。

提前感谢!

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_buffers 1
#property indicator_color1 Black
//---- indicator buffers
double ExtVolumesBuffer[];
double emaExtVolumesBuffer[];

//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0,emaExtVolumesBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
//---- sets default precision format for indicators visualization
IndicatorDigits(0);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("emaVolumes");
SetIndexLabel(0,"emaVolumes");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i,nLimit,nCountedBars;
//---- bars count that does not changed after last indicator launch.
nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars>0) nCountedBars--;
nLimit=Bars-nCountedBars;
//----
for(i=0; i<nLimit; i++)
{
double dVolume=Volume[i];
ExtVolumesBuffer[i]=dVolume;
emaExtVolumesBuffer[i]=iMAOnArray(ExtVolumesBuffer,0,10,0,MODE_EMA,i);

Print(Volume[i],Volume[i+1],Volume[i+2],Volume[i+3]);
Print(ExtVolumesBuffer[i],ExtVolumesBuffer[i+1],ExtVolumesBuffer[i+2],ExtVolumesBuffer[i+3]);
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
 
sss2019:


谢谢你。所以,值1对应的是M1期,值5对应的是M5期,所以它意味着值60对应的是H1期,值240对应的是H4期,对吗?

我需要这样的结构:当选择M1期时,情况是1,当选择M15期时,情况是15。这能行吗?还是必须按顺序进行案例1、案例2、案例3?

int CurrentGrafPeriod ()
{
   
int Ba;
int GrafPeriod = Period();    
  switch(GrafPeriod)
    {
 
    case 1 :  Ba = 60; break;
    case 5 :  Ba = 12; break;
    case 15 : Ba = 4;  break;
    case 30 : Ba = 2;  break;
    case 60 : Ba = 1;  break;
    }
return(Ba);
}

if(CurrentGrafPeriod () == 1){ваше исполнение}
if(CurrentGrafPeriod () == 5){ваше исполнение}
и так далее...
但这只是一个理论--我不知道它是否会成功....
 
sss2019:


谢谢你。所以M1期对应的是值1,M5期对应的是值5,所以这意味着H1期对应的是值60,H4期对应的是值240,对吗?

我希望这个结构能够发挥作用:当周期M1被设置为情况1,当周期M15被设置为情况15。它能这样工作吗,还是有必要让案例1案例2案例3--依次进行?


首先,你最好使用命名的常数,而不是数字1、5等 PERIOD_M1、PERIOD_M5,等等。

第二,你的例子中存在一个错误。Ba 变量将永远取值为1。

 
sss2019:


谢谢你。所以M1期对应的是值1,M5期对应的是值5,所以这意味着H1期对应的是值60,H4期对应的是值240,对吗?

我希望这个结构能够发挥作用:当周期M1被设置为情况1,当周期M15被设置为情况15。它是否会起作用,或者是否有必要让案例1案例2案例3--按顺序进行?

1) 如果你在每一行中添加一个断句,就可以工作。

2) 与其用1、5、15,不如用PERIOD_M1、PERIOD_M5、PERIOD_M15等。

 

下午好,刚刚遇到了一个事实,即交易机器人在达到盈利时没有平仓,大约50次就有一次。然后它必须关闭所有的东西,包括挂单和所有的东西,并重新设置。不关闭会造成订单混乱和缩减。

你能想象吗,有时会发现一个订单,肯定是在takeprofit时关闭的,其订单closeprice等于零!!!!!。

在这里,看看截图,这里是底部的第五行;这个订单,传统上称为49,在TakeProfit上关闭。而在底部的第九行 Orderclosepriche等于零!!!!!

 
PapaYozh:

第二,你的例子中存在一个错误。变量Ba 将永远取值1。

为什么呢?它是否缺少休息?
 
dkfl.zrjdktdbx:

下午好,刚刚遇到了一个事实,即交易机器人在达到盈利时没有平仓,大约50次就有一次。然后它必须关闭所有的东西,包括挂单和所有的东西,并重新设置。不关闭会造成订单混乱和缩减。

你能想象吗,有时会发现一个订单,肯定是在takeprofit时关闭的,其订单closeprice等于零!!!!!。

你可以在下面的截图中看到,这里是第五行;名义上称为49的订单在TakeProfit上关闭。而在从底部开始的第九行,Orderclosepriche等于零!!!!!。


这不是orderclossepriche - 是Clowes Price - 订单的收盘价

你的专家顾问的代码需要被纠正。它是一个正在战斗的人。

 

我明白了。代码中又没有什么特别复杂的东西...... 我现在就把它贴出来。

当我下订单时,我把时间保存在wremjapomnim。 一旦有任何订单以当前利润关闭,我就删除所有订单,并再次在wremjapomnim变量中记住时间,并设置它们。

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
 
melnikas:

你好!

请帮助我理解这一点。我想写一个简单的指标,但不知为何它给出的是空值。

在我看来,错误似乎就在这个地方的某个地方


因为这个操作在ExtVolumesBuffer数组中的字段并没有改变任何东西。

我明白我在某处犯了错误,但我不明白在哪里。

提前感谢!


我的案子有这么复杂吗?