SetForeign obviously changes OHLC arrays, was: Plortext signal buy and sell

Hello, I am trying to represent the exit and entry signals on the graph.
The problem that arises for me is that the closing price that it shows me does not correspond to that of the day of the transaction.
any suggestion?
Code

IAOK=InerciaAlcista>810 AND Ref(InerciaAlcista,-1)<810 AND RStop<=11 AND RStop>=3 AND RSCSP500>0 AND RSCSector>0;

IANOK=inerciaalcista<420 AND Ref(InerciaAlcista,-1)>420 AND RSCSP500<-0.1 AND RSCSector<-0.1;

Buysetup=IAOK;
Buystop=Close;
Buy=Buysetup;
BuyPrice=Buystop;

sellsetup=IANOK;
sellstop=Close;
sell=sellsetup;
sellPrice=sellstop;
Sell=ExRem(Sell,Buy);

fntsize = 8;// font size
dist = 35;// y-offset

bi = Barindex();
fvb = FirstVisiblevalue( bi );
lvb = LastVisiblevalue( bi );
dt = DateTime();

dtformat = "\n%d-%m-%y\n";
bkcolor = -1;// text background color, -1 means default color (transparent)

PlotTextSetFont( "", "ARIAL", fntsize, BarCount-1, 0, -1 );

for ( i = fvb; i <= lvb; i++ ) {
if( Buy[i] || Sell[i] ) {
var = "\n" + c[i] + DateTimeFormat(dtformat, dt[i]);
if( Buy[i] ) PlotText( "Compra" + var, i, L[i], colorGreen, bkcolor, -dist+3fntsize );
if( Sell[i] ) PlotText( "Venta" + var, i, H[i], colorRed, bkcolor, dist +4
fntsize );
}
}

PlotShapes(Buy*shapeUpArrow,colorLightBlue);

PlotShapes(Sell*shapeDownArrow,colorRed);

Chart

image

When posting the formula, please make sure that you use Code Tags (using </> code button) as explained here: How to use this site.

Using code button

Code tags are required so formulas can be properly displayed and copied without errors.

IAOK=InerciaAlcista>810 AND Ref(InerciaAlcista,-1)<810 AND RStop<=11 AND RStop>=3 AND RSCSP500>0 AND RSCSector>0;

IANOK=inerciaalcista<420 AND Ref(InerciaAlcista,-1)>420 AND RSCSP500<-0.1 AND RSCSector<-0.1;

Buysetup=IAOK;
Buystop=Close;
Buy=Buysetup;
BuyPrice=Buystop;

sellsetup=IANOK;
sellstop=Close;
sell=sellsetup;
sellPrice=sellstop;
Sell=ExRem(Sell,Buy);

fntsize = 8;// font size
dist = 35;// y-offset

bi = Barindex();
fvb = FirstVisiblevalue( bi );
lvb = LastVisiblevalue( bi );
dt = DateTime();

dtformat = "\n%d-%m-%y\n";
bkcolor = -1;// text background color, -1 means default color (transparent)

PlotTextSetFont( "", "ARIAL", fntsize, BarCount-1, 0, -1 );

for ( i = fvb; i <= lvb; i++ ) {
if( Buy[i] || Sell[i] ) {
var = "\n" + c[i] + DateTimeFormat(dtformat, dt[i]);
if( Buy[i] ) PlotText( "Compra" + var, i, L[i], colorGreen, bkcolor, -dist+3fntsize );
if( Sell[i] ) PlotText( "Venta" + var, i, H[i], colorRed, bkcolor, dist +4fntsize );
}
}

PlotShapes(Buy*shapeUpArrow,colorLightBlue);

PlotShapes(Sell*shapeDownArrow,colorRed);```

The code is good and Close price value is correct, the one of that i-th bar.
You should triple check if you are looking at correct dates. You should CLICK ON the bar to display values for given bar in the title. Tooltip on your screenshot shows something completely unrelated (not the bar with trade)

The close price show by plotext is not correct.
Have you seen the chart?
The date is correct but not the buy price(close) and I don't know the cause.

For example, for the buy of 15-03-19 how plottext show a buy price of 278,76 when the price is around 340€?
For 24-05-19 the buy price of plottext is 271,42 (lower than first buy) and the close is around 356 (higher than first buy).
Thanks

The formula that you posted is NOT meeting forum standards. You should post formula that can be copy pasted and RUN WITHOUT CHANGES and reproduces the problem you are having.
The formula that you posted generates syntax errors due to missing assignments (since it is not whole formula).

You did NOT send entire formula, therefore no-one knows what you do in remaining parts (NOT presented here). Maybe you are overwriting C array. No-one knows. We are not here to play guessing games.

I can send you a screenshot that shows that I am getting correct close price (using formula that I had to augment MYSELF, since you did not provide whole one).

image

If you expect others to help you, you need to follow this advice: How to ask a good question

If you are having problem with the code that you wrote, use advice given here: How do I debug my formula?

I copy the complete code and I hope to receive some useful help.

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); 

//Dato media movil 30 semanas
Plot(WMA(c,30),_DEFAULT_NAME(),IIf(WMA(c,30)>=Ref(WMA(c,30),-1),colorBlue,colorRed),styleLine + styleThick);

//Datos identificación valor y sector.
GfxSetTextColor(colorDarkGreen);
StrNombre=StrFormat(FullName());

ICBNombre=IcbID(mode=1);
GfxTextOut(StrNombre,50,50);
GfxTextOut(ICBNombre,50,65);

//Dibujo máximo y mínimo del periodo


maxi=HHV(Close,52);
mini=LLV(Close,52);

Plot(maxi,"Linea de máximos",colorGreen,styleLine+styleThick);
plot(mini,"Linea de mínimos",colorRed,styleLine+styleThick);

// Calculo RSCMAnsfield SP500

rsSymbolSP500=ParamStr("Base Index Symbol","SPX");
CocienteSP500=C/Foreign(rsSymbolSP500,"C");
countRSP500=Sum(CocienteSP500,52);
BasepriceSP500=countRSP500/52;
RSCSP500=((CocienteSP500/BasepriceSP500)-1)*10;

_SECTION_END();

SetTradeDelays(0,0,0,0);
//Calculo la inercia alcista


ROC26=ROC(C,26)*0.4;
ROC42=ROC(C,42)*0.2;

F1=ROC26+ROC42;



ATR61=ATR(61);


F2=(ATR61/MA(C,61))*0.4;




InerciaAlcista=F1/F2;
//------------------------------------------------

//Calculo el Riesgo Stop


wm=WMA(Close,30);
cero=0;
Rstop=IIf(C>=wm,(Close-wm)/Close*100,(abs(Close-wm))/Close*100);

/// Calculo RSCMansfield Sector

mercado="EUROPEO";
sector="STOXX50E";

if (MarketID()==1 OR MarketID()==2)
{
	mercado="AMERICANO";
}

if (MarketID()==3)
{
	mercado="EUROPEO";
}

if (MarketID()==4)
{
	mercado="NORDICO";
}

if (MarketID()==5)
{
	mercado="SUIZO";
}

//Buscamos el subsector ICB y en función del mercado se le asigna un índice sectorial u otro

if (mercado=="AMERICANO")
{
	switch(IcbID(0))
		{
//1010	Technology
			
			case "10101010":
				sector="DJUSDV";break;
			case "10101020":
				sector="DJUSNS";break;
			case "10101015":
				sector="DJUSSW";break;
			case "10102030":
				sector="DJUSCR";break;
			case "10102015":
				sector="DJUSOE";break;
			case "10102010":
				sector="DJUSSC";break;
//1510	Telecommunications
		
			case "15102015":
				sector="DJUSWC";break;
			case "15101010":
				sector="DJUSCT";break;
//2010	Health Care  
			
			case "20101025":
				sector="DJUSHP";break;
				
			case "20102010":
				sector="DJUSAM";break;
			case "20102015":
				sector="DJUSMS";break;
			case "20103010":
				sector="DJUSBT";break;
			case "20103015":
				sector="DJUSPR";break;				
//3010	Banks

			case "30101010":
				sector="DJUSBK";break;	
				
//3020	Financial Services 
				
			case "30201030":
				sector="DJUSFA";break;	
			case "302030":
				sector="DJUSMR";break;		
			case "30202010":
				sector="DJUSAG";break;		
			case "30201020":
				sector="DJUSSF";break;	
				
			case "302020":
				sector="DJUSSP";break;		
			case "30202015":
				sector="DJUSSB";break;		
			case "30201025":
				sector="DJUSMF";break;	
			case "30204000":
				sector="DJUSFI";break;	
			case "30205000":
				sector="DJUSFI";break;		
				
//3030	Insurance
	
			case "30302010":
				sector="DJUSIF";break;	
				
			case "30302015":
				sector="DJUSIB";break;		
			
			case "30302025":
				sector="DJUSIP";break;		
			
			case "30302020":
				sector="DJUSIU";break;		
			case "30301010":
				sector="DJUSIL";break;	
				
//3510	Real Estate 


			case "35101010":
				sector="DJUSEH";break;		
				
			case "35101015":
				sector="DJUSES";break;			
				
			case "35102020":
				sector="DJUSIO";break;		
			
			case "35102045":
				sector="DJUSRL";break;	
			
			case "35102040":
				sector="DJUSRN";break;	
			
			case "351020":
				sector="DJUSDT";break;	
			
			case "35102070":
				sector="DJUSSR";break;	
			
			case "35102015":
				sector="DJUSHL";break;	
			
//4010	Automobiles and Parts

			case "40101020":
				sector="DJUSAU";break;	
			
			case "40101025":
				sector="DJUSAT";break;	
			
			case "40101015":
				sector="DJUSTR";break;	
			
//4020	Consumer Products and Services

			case "40202025":
				sector="DJUSHD";break;	
			
			case "40202015":
				sector="DJUSFH";break;	
			
			case "40202010":
				sector="DJUSHB";break;	
			
			case "40203010":
				sector="DJUSLE";break;
			
			case "40203050":
				sector="DJUSRP";break;
			
			case "40203045":
				sector="DJUSTY";break;
			
			case "40204020":
				sector="DJUSCF";break;
			
			case "40204025":
				sector="DJUSFT";break;
			
			case "40201070":
				sector="DJUSCS";break;
			
//4030	Media

			case "40301010":
				sector="DJUSBC";break;
			
			case "40301020":
				sector="DJUSAV";break;
			
			case "40301030":
				sector="DJUSPB";break;
			
//4040	Retail 

			case "40401020":
				sector="DJUSRA";break;
			
			case "40401010":
				sector="DJUSRB";break;
			
			case "40401025":
				sector="DJUSHI";break;
			
			case "40401030":
				sector="DJUSRS";break;
//4050	Travel and Leisure
			
			case "40501010":
				sector="DJUSAR";break;
			
			case "40501020":
				sector="DJUSCA";break;
			
			case "40501025":
				sector="DJUSLG";break;
			
			case "40501030":
				sector="DJUSRQ";break;
			
			case "40501040":
				sector="DJUSRU";break;
			
			case "40501015":
				sector="DJUSTT";break;

//4510	Food, Beverage and Tobacco 

			case "45101010":
				sector="DJUSDB";break;
			
			case "45101015":
				sector="DJUSVN";break;
			
			case "45101020":
				sector="DJUSSD";break;
			
			case "45102010":
				sector="DJUSFO";break;
			
			case "45102020":
				sector="DJUSFP";break;
			
			case "45103010":
				sector="DJUSTB";break;
			
//4520	Personal Care, Drug and Grocery Stores 

			case "45201030":
				sector="DJUSHN";break;
			
			case "45201020":
				sector="DJUSCM";break;
			
			case "45201015":
				sector="DJUSRD";break;
			
			case "45201010":
				sector="DJUSFD";break;

//5010	Construction and Materials

			case "50101035":
				sector="DJUSBD";break;
			
			case "50101010":
				sector="DJUSHV";break;

//5020	Industrial Goods and Services

			case "50201010":
				sector="DJUSAS";break;

			case "50201020":
				sector="DJUSDN";break;

			case "50203030":
				sector="DJUSCP";break;

			case "502030":
				sector="DJUSID";break;

			case "50202010":
				sector="DJUSEC";break;
				
			case "50202040":
				sector="DJUSAI";break;
			
			case "50206015":
				sector="DJUSHR";break;

			case "502040":
				sector="DJUSFE";break;
				
			case "50206040":
				sector="DJUSAF";break;
				
			case "50206030":
				sector="DJUSMT";break;
				
			case "50206020":
				sector="DJUSRR";break;
				
			case "50206060":
				sector="DJUSTS";break;
				
			case "50206010":
				sector="DJUSTK";break;
				
			case "50205020":
				sector="DJUSIV";break;
				
			case "50205025":
				sector="DJUSBE";break;

			case "50205010":
				sector="DJUSDS";break;

//5510	Basic Resources

			case "55101010":
				sector="DJUSFR";break;

			case "55101015":
				sector="DJUSPP";break;


			case "55102035":
				sector="DJUSAL";break;

			case "55102050":
				sector="DJUSNF";break;

			case "55102010":
				sector="DJUSST";break;


			case "55103020":
				sector="DJUSMG";break;


			case "551020":
				sector="DJUSMG";break;

			case "55103025":
				sector="DJUSPM";break;

			case "55103030":
				sector="DJCIPM";break;

//5520	Chemicals

			case "552010":
				sector="DJUSCC";break;

			case "55201020":
				sector="DJUSCX";break;

//6010	Energy

			case "60101010":
				sector="DJUSOS";break;
				
//En Amibroker no contempla el 60101000
			case "601010":
				sector="DJUSOL";break;

			case "60101030":
				sector="DJUSOI";break;

			case "60101035":
				sector="DJUSPL";break;


			case "60102020":
				sector="DWCREE";break;

			case "60102010":
				sector="DWCAFL";break;

			case "60101040":
				sector="DJUSCL";break;

//6510	Utilities
	
			case "65103035":
				sector="DJUSPC";break;
			
			case "65101015":
				sector="DJUSVE";break;
			
			case "65101010":
				sector="DWCAEG";break;
			
			case "65102020":
				sector="DJUSGU";break;
			
			case "651020":
				sector="DJUSMU";break;
			
			case "65102030":
				sector="DJUSWU";break;
				
		default: sector="SPX";
		
		}
		
}
			
if ((mercado=="EUROPEO") OR (mercado=="NORDICO") OR (mercado=="SUIZO"))
{
	switch(IcbID(0))
		{
//1010	Technology
			
			case "10101010":
				sector="T9533P";break;
			case "10101020":
				sector="T9530P";break;
			case "10101015":
				sector="T9537P";break;
			case "10102030":
				sector="T9570P";break;
			case "10102015":
				sector="T9570P";break;
			case "10102010":
				sector="T9576P";break;
//1510	Telecommunications
		
			case "15102015":
				sector="BTEP";break;
			case "15101010":
				sector="T9578P";break;

//2010	Health Care  
			
			case "20101025":
				sector="BPHP";break;
				
			case "20102010":
				sector="BPHP";break;
			case "20102015":
				sector="BPHP";break;
			case "20103010":
				sector="T4573P";break;
			case "20103015":
				sector="T4577P";break;				
//3010	Banks

			case "30101010":
				sector="BBAP";break;	
				
//3020	Financial Services 
				
			case "30201030":
				sector="BIGP";break;	
			case "302030":
				sector="T8670P";break;		
			case "30202010":
				sector="SXFP";break;		
			case "30201020":
				sector="SXFP";break;
				
			case "302020":
				sector="SXFP";break;	
			case "30202015":
				sector="SXFP";break;		
			case "30201025":
				sector="SXFP";break;	
			case "302040":
				sector="SXFP";break;	
			case "302050":
				sector="SXFP";break;		
				
//3030	Insurance
	
			case "30302010":
				sector="BINP";break;	
				
			case "30302015":
				sector="BINP";break;	
			
			case "30302025":
				sector="BINP";break;		
			
			case "30302020":
				sector="BINP";break;		
			case "30301010":
				sector="T8570P";break;	
				
//3510	Real Estate 


			case "35101010":
				sector="T8633P";break;		
				
			case "35101015":
				sector="T8630P";break;			
				
			case "35102020":
				sector="SETTRP";break;		
			
			case "35102045":
				sector="T8672P";break;	
			
			case "35102040":
				sector="T8670P";break;	
			
			case "351020":
				sector="T8670P";break;
			
			case "35102070":
				sector="T8670P";break;
			
			case "35102015":
				sector="T8670P";break;
			
//4010	Automobiles and Parts

			case "40101020":
				sector="BATP";break;	
			
			case "40101025":
				sector="BATP";break;	
			
			case "40101015":
				sector="BATP";break;	
			
//4020	Consumer Products and Services

			case "40202025":
				sector="T3720P";break;	
			
			case "40202015":
				sector="T3720P";break;		
			
			case "40202010":
				sector="T3720P";break;		
			
			case "40203010":
				sector="T3740P";break;
			
			case "40203050":
				sector="T3740P";break;
			
			case "40203045":
				sector="T3740P";break;
			
			case "40204020":
				sector="T3760P";break;
			
			case "40204025":
				sector="T3760P";break;
			
			case "40201070":
				sector="SXTDP";break;
			
//4030	Media

			case "40301010":
				sector="BMDP";break;
			
			case "40301020":
				sector="BMDP";break;
			
			case "40301030":
				sector="BMDP";break;
			
//4040	Retail 

			case "40401020":
				sector="SXTDP";break;
			
			case "40401010":
				sector="SXTDP";break;
			
			case "40401025":
				sector="SXTDP";break;
			
			case "40401030":
				sector="SXTDP";break;
//4050	Travel and Leisure
			
			case "40501010":
				sector="T5751P";break;
			
			case "40501020":
				sector="T5700P";break;
			
			case "40501025":
				sector="T5700P";break;
			
			case "40501030":
				sector="T5700P";break;
			
			case "40501040":
				sector="T5700P";break;
			
			case "40501015":
				sector="T5700P";break;

//4510	Food, Beverage and Tobacco 

			case "45101010":
				sector="SIPBVG";break;
			
			case "45101015":
				sector="SIPBVG";break;
			
			case "45101020":
				sector="SIPBVG";break;
			
			case "45102010":
				sector="SXPFOA";break;
			
			case "45102020":
				sector="SXPFOA";break;
			
			case "45103010":
				sector="SETTFP";break;
			
//4520	Personal Care, Drug and Grocery Stores 

			case "45201030":
				sector="T3720P";break;
			
			case "45201020":
				sector="T3760P";break;
			
			case "45201015":
				sector="SXTDP";break;
			
			case "45201010":
				sector="SXTDP";break;

//5010	Construction and Materials

			case "50101035":
				sector="BCNP";break;
			
			case "50101010":
				sector="BCNP";break;

//5020	Industrial Goods and Services

			case "50201010":
				sector="SXPARO";break;

			case "50201020":
				sector="SXPARO";break;

			case "50203030":
				sector="T2720P";break;

			case "502030":
				sector="T2720P";break;
			
			case "50202010":
				sector="T2730P";break;
				
			case "50202040":
				sector="T2730P";break;
			
			case "50206015":
				sector="SXPIEQ";break;

			case "502040":
				sector="SXPIEQ";break;
				
			case "50206040":
				sector="SIPTRA";break;
				
			case "50206030":
				sector="SIPTRA";break;
				
			case "50206020":
				sector="SIPTRA";break;
				
			case "50206060":
				sector="SIPTRA";break;
				
			case "50206010":
				sector="SIPTRA";break;
				
			case "50205020":
				sector="BIGP";break;
				
			case "50205025":
				sector="BIGP";break;

			case "50205010":
				sector="BIGP";break;

//5510	Basic Resources

			case "55101010":
				sector="SIPFRP";break;

			case "55101015":
				sector="SIPFRP";break;


			case "55102035":
				sector="T1750P";break;

			case "55102050":
				sector="T1750P";break;

			case "55102010":
				sector="T1750P";break;


			case "55103020":
				sector="T1750P";break;


			case "551020":
				sector="T1750P";break;
				
			case "55103025":
				sector="T1750P";break;

			case "55103030":
				sector="T1750P";break;

//5520	Chemicals

			case "552010":
				sector="SX4E";break;

			case "55201020":
				sector="BCHP";break;

//6010	Energy

			case "60101010":
				sector="SXEP";break;
				
				
//En Amibroker no contempla el 60101000


			case "601010":
				sector="SXEP";break;

			case "60101030":
				sector="SXEP";break;

			case "60101035":
				sector="SXEP";break;

			case "60102020":
				sector="T0583P";break;

			case "60102010":
				sector="T0583P";break;

			case "60101040":
				sector="T1750P";break;

//6510	Utilities
	
			case "65103035":
				sector="BIGP";break;
			
			case "65101015":
				sector="SXPELC";break;
			
			case "65101010":
				sector="SXPELC";break;
			
			case "65102020":
				sector="T7570P";break;
			
			case "651020":
				sector="T7570P";break;
			
			case "65102030":
				sector="T7570P";break;
				
		default: sector="STOXX50E";
		
		}
		
}			
			
SetForeign(sector);

rsSymbol=ParamStr("Base Index Symbol","SPX");

//Comienza el cálculo del RSC Mansfield del subsector.

Cociente=C/Foreign(rsSymbol,"C");
countR=Sum(Cociente,52);
Baseprice=CountR/52;
RSCSector=((Cociente/Baseprice)-1)*10;




Buy=0;
Sell=0;








//Condiciones de entrada Sistema Inercia

//Entrada:Cruce por encima de 810, RSC SP500 por encima de cero, RSSector por encima de cero y Riesgo no superior a 10 pero sí a 3
//Salida:Cruce por debajo de 420, RS SP500 por debajo de cero, RSSector por debajo de cero o riesgo stop superior a 30


IAOK=InerciaAlcista>810 AND Ref(InerciaAlcista,-1)<810 AND RStop<=11 AND RStop>=3 AND RSCSP500>0 AND RSCSector>0;

IANOK=inerciaalcista<420 AND Ref(InerciaAlcista,-1)>420 AND RSCSP500<-0.1 AND RSCSector<-0.1;



Buysetup=IAOK;
Buystop=Close;
Buy=Buysetup;
BuyPrice=Buystop;



sellsetup=IANOK;
sellstop=Close;
sell=sellsetup;
sellPrice=sellstop;


Sell=ExRem(Sell,Buy);

fntsize = 8;// font size
dist = 35;// y-offset

bi = Barindex();
fvb = FirstVisiblevalue( bi );
lvb = LastVisiblevalue( bi );
dt = DateTime();


dtformat = "\n%d-%m-%y\n";
bkcolor = -1;// text background color, -1 means default color (transparent)

PlotTextSetFont( "", "ARIAL", fntsize, BarCount-1, 0, -1 );

PlotShapes(Buy*shapeUpArrow,colorLightBlue,0,Graph0,-12);

PlotShapes(Sell*shapeDownArrow,colorRed);



for ( i = fvb; i <= lvb; i++ ) {
    if( Buy[i] || Sell[i] )	{
		var = "\n" + c[i] + DateTimeFormat(dtformat, dt[i]);
		if( Buy[i] )  PlotText( "Compra " + var, i, L[i], colorGreen, bkcolor, -dist+3*fntsize );
		if( Sell[i] ) PlotText( "Venta " + var, i, H[i], colorRed, bkcolor, dist  );
		
		
		
    }
}





So once again I was correct in my previous post, in guessing that:

Maybe you are overwriting C array.

Now that you included entire formula, it can be seen that before you do PlotText, you are doing this:

this effectively changes content of CLOSE (and OHL, V) arrays with the data of FOREIGN symbol. That is why you get close price of FOREIGN symbol, not the one on chart. Quite obviously you need to call RestorePriceArrays AFTER you call SetForeign to restore prices. It is all documented in the manual AFL Function Reference - SETFOREIGN

2 Likes

This topic was automatically closed 100 days after the last reply. New replies are no longer allowed.