//------------------------------------------------------------------------
// : vip09
// : vip09
// : ʽӦ
// : ûӦ
// : Void
//------------------------------------------------------------------------
Params
	//Ĭ888 1Сʱ
	Numeric Length(20);		//		
	Numeric Offset(2);		//׼  
	Numeric X(0.5);
	Numeric SS(0.01); 
	Numeric TRS(75);//ƶֹֹӯ Χ 5-1005
	Numeric Fund(20000); //Ͷ뱣֤
Vars
	Numeric Lots(0);
	Series<Numeric> ma1;
	Series<Numeric> UpLine;		//Ϲ
	Series<Numeric> DownLine;		//¹ 
	Series<Numeric> MidLine;	//м
	Series<Numeric> Band;
	
	Series<Numeric> cond1;
	Series<Numeric> cond2;
	Series<Numeric> cond3;
	Series<Numeric> cond4;

	Series<Numeric> kcond1;
	Series<Numeric> kcond2;
	Series<Numeric> kcond3;
	Series<Numeric> kcond4;

	//
	Series<Numeric> MyPrice;//ּ۸
	Series<Numeric> MyPrice2;//ּ۸
	Series<Numeric> HighAfterEntry;//ֵֺ߼
	Series<Numeric> LowAfterEntry;//ֵֺͼ
	Series<Numeric> liQKA;
	Series<Numeric> DliqPoint;
	Series<Numeric> KliqPoint;
	Series<Numeric> barcoutN;
	Series<Numeric> bar_entry_count;
	Series<Numeric> kaicang_kg;
	Series<Numeric> BB;
	Series<Numeric> WIDTH;
	Plot plt1;
	Plot plt2;
Events
	//˴ʵ¼
	
	//ʼ¼ڼ䣬ֻһΣӦڶݵȲ
	OnInit()
	{
		//Դй
		Range[0:DataCount-1]
		{
			//=========Դ==============
			AddDataFlag(Enum_Data_RolloverBackWard());	//úȨ

			AddDataFlag(Enum_Data_RolloverRealPrice());	//ӳʵ۸

			AddDataFlag(Enum_Data_AutoSwapPosition());	//Զ

			//AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());	//úԻźż
			plt1.figure(0);  //plt_volû壬ûָid,ϵͳԶ
			plt2.figure(0);
		}

	}

	//Bar¼indexsʾ仯ԴͼID
	OnBar(ArrayRef<Integer> indexs)
	{

		Lots = Max(1, Round(Fund/(O*ContractUnit*BigPointValue* MarginRatio/rollover), 0));
		MidLine = AverageFC(Close,Length);
		Band = StandardDev(Close,Length,2); 
		UpLine = MidLine + Offset * Band;
		DownLine = MidLine - Offset * Band; 
		
		PlotNumeric("MidLine",cond1,cond1,White);
		PlotNumeric("UpLine",cond2,cond2,red);
		PlotNumeric("DownLine",cond3,cond3,Green);
		
		//ּޣBB=̼-¹۸/Ϲ۸-¹۸
		BB=((C-DownLine)/(UpLine-DownLine));
		//WIDTH=Ϲֵ-¹ֵ/ƽֵ
		WIDTH=((UpLine-DownLine)/MidLine);
		plt1.line("BB",BB); //
		plt2.line("WIDTH",WIDTH);

	
		if(MarketPosition!=1 and H>=UpLine[1] and C[1]<UpLine[1] and BB[1]>X and WIDTH[1]>SS)
		{
			Buy(Lots,max(open,UpLine[1])); // 㿪
			LowAfterEntry = EntryPrice;//ͷּ۸;
			kaicang_kg=1;   // ѿ
			bar_entry_count=0;  // δֵBar
			barcoutN=0; //liQKAϵļ
			liQKA = 1; 
		}
	
		if(MarketPosition!=-1 and L<=DownLine[1] and C[1]>DownLine[1] and BB[1]<X and WIDTH[1]>SS)
		{
			SellShort(Lots,min(open,DownLine[1])); // 㿪
			HighAfterEntry = EntryPrice;//ͷּ۸;
			kaicang_kg=1;   // ѿ
			bar_entry_count=0;  // δֵBar
			barcoutN=0; //liQKAϵļ
			liQKA = 1; 
		}

	
		if(kaicang_kg[1] ==1) // ڱпֲ
		{
			bar_entry_count=bar_entry_count+1; // ּһ
		}
		Else
		{
			bar_entry_count=0; // ûп֣򽫿ּΪ 0
		}
		
    	//ƶ
    	If(MarketPosition == 0)   // ӦĬֵ
    	{
    		liQKA = 1; 
    		barcoutN=0;
    	}Else if(bar_entry_count>barcoutN)					 //гֲֵ£liQKAųֲʱӶ𽥼Сֹֹӯȳļ١
    	{
    		liQKA = liQKA - 0.1; 
    		liQKA = Max(liQKA,0.3);
    		barcoutN=bar_entry_count;
    	}
    	
    	Commentary("kaicang_kg[1]"+text(kaicang_kg[1]));
		Commentary("bar_entry_count"+text(bar_entry_count));
		Commentary("barcoutN"+text(barcoutN));
		Commentary("liQKA"+text(liQKA));
    	// ¼ֺߵ͵
		If(bar_entry_count > 0)
		{
			HighAfterEntry = Min(HighAfterEntry,High); // ͷֹ𣬸͵߼
			LowAfterEntry = Max(LowAfterEntry,Low);    // ͷֹ𣬸ߵͼ
		}
		
    	if(MarketPosition>0)
    	{
			DliqPoint = LowAfterEntry - (Open*TRS/1000)*liQKA; //㣬Ƴ߻ųֲʱӱԽԽУ
    	}
    	if(MarketPosition<0)
    	{
			KliqPoint = HighAfterEntry + (Open*TRS/1000)*liQKA; //㣬Ƴ߻ųֲʱӱԽԽУ
    	}
    
    	If(KliqPoint[1]>0 and MarketPosition<0)PlotNumeric("KliqPoint[1]",KliqPoint[1]);
    	if(DliqPoint[1]>0 and MarketPosition>0)PlotNumeric("DliqPoint[1]",DliqPoint[1]);
    	
    	// ж൥ʱ
    	If(MarketPosition >0 And bar_entry_count >0  And Low <= DliqPoint[1] and DliqPoint[1]>0 and DliqPoint[1]>0  and bar_entry_count>0) 
    	{
    	
    			Sell(0,Min(Open,DliqPoint[1]));
    			DliqPoint=0;
    			kaicang_kg=0;
    	}
    	
    	// пյʱ
    	If(MarketPosition <0 And bar_entry_count >0  And High >= KliqPoint[1] and KliqPoint[1]>0 and KliqPoint[1]>0  and bar_entry_count>0)
    	{	
    		
    			BuyToCover(0,Max(Open,KliqPoint[1]));
    			KliqPoint=0;
    			kaicang_kg=0;
    	}
    	
    	
	
	}
