Come codificare? - pagina 96

 
 

Ciao a tutti,

Questa è una stupida domanda di codifica, e so di averla già vista da qualche parte, ma ho bisogno di aiuto.

Sto codificando un indicatore personalizzato, e tutto quello che voglio che faccia è leggere il prezzo di offerta corrente solo all'inizio di una nuova barra. Non posso semplicemente usare Open[0] perché ogni volta che arriva un nuovo tick continuerà a restituire il valore open per la barra corrente. Voglio che il valore venga restituito solo una volta, finché non si forma una nuova barra.

So che mi manca qualcosa di abbastanza semplice qui, ma sto avendo qualche problema a capirlo. Qualcuno potrebbe aiutarmi?

Grazie,

-wolfe

 
wolfe:
Ciao a tutti,

Questa è una domanda di codifica stupida, e so di averla già vista da qualche parte, ma ho bisogno di aiuto.

Sto codificando un indicatore personalizzato, e tutto quello che voglio che faccia è leggere il prezzo di offerta corrente solo all'inizio di una nuova barra. Non posso semplicemente usare Open[0] perché ogni volta che arriva un nuovo tick continuerà a restituire il valore open per la barra corrente. Voglio che il valore venga restituito solo una volta, finché non si forma una nuova barra.

So che mi manca qualcosa di abbastanza semplice qui, ma sto avendo qualche problema a capirlo. Qualcuno potrebbe aiutarmi?

Grazie,

-wolfe

Basta memorizzare il tempo della barra corrente (Time[0]) - quando questo valore cambia, hai una nuova barra, quindi prendi il prezzo, memorizza il nuovo valore e ripeti...

 
omelette:
Basta memorizzare il tempo della barra corrente (Time[0]) - quando questo valore cambia, hai una nuova barra, quindi prendi il prezzo, memorizza il nuovo valore e ripeti...

Grazie frittata,

Avrei dovuto pensarci, sono un po' deluso da me stesso!

Grazie per l'aiuto!

 

Qualcuno può mostrarmi cosa sto facendo di sbagliato in questo codice?

Vorrei aggiungere più timeframe in esso come timeframe Daily, ma non so cosa sia sbagliato

//+---------------------------------------------------------+

//| #MTF_Hi_Low_Middle.mq4

//| Base da spudfibo.Upgrade di Darkkiller

//: Grazie a Mladen per avermi aiutato a fare qualche correzione

//+------------------------------------------------------------------+

#proprietà indicator_chart_window

extern string note1 = "colori H4 Higher,Middle,Lower";

extern color H4HigherColor = DeepSkyBlue;

extern color H4MiddleColor = Giallo

extern color H4LowerColor = HotPink;

extern string note2 = "Disegnare H4 Superiore, Inferiore e Medio?

extern bool H4HiLow = true;

extern bool H4Mid = true;

extern string note3 = "Colori D1 Superiore, Medio, Inferiore";

extern color D1HigherColor = DeepSkyBlue;

extern color D1MiddleColor = Giallo;

extern color D1LowerColor = HotPink;

extern string note4 = "Disegnare D1 Superiore, Inferiore e Medio?

extern bool D1HiLow = true;

extern bool D1Mid = true;

double HiPrice, LoPrice, Range, D1HiPrice, D1LoPrice, D1Range;

datetime StartTime;

int init()

{

return(0);

}

int deinit()

{

ObjectDelete("H4Higher");

ObjectDelete("H4Lower");

ObjectDelete("H4Middle");

ObjectDelete("D1Higher");

ObjectDelete("D1Lower");

ObjectDelete("D1Middle");

return(0);

}

//+------------------------------------------------------------------+

//| Disegna il Fibo

//+------------------------------------------------------------------+

int DrawFibo()

{

///////////////////////////////////////////HILO/////

se(H4HiLow)

{

if(ObjectFind("H4Higher") == -1)

ObjectCreate("H4Higher", OBJ_FIBO, 0, StartTime, HiPrice+Range, StartTime, HiPrice);

altrimenti

{

ObjectSet("H4Higher",OBJPROP_TIME2, StartTime);

ObjectSet("H4Higher",OBJPROP_TIME1, StartTime);

ObjectSet("H4Higher",OBJPROP_PRICE1,HiPrice+Range);

ObjectSet("H4Higher",OBJPROP_PRICE2,HiPrice);

}

ObjectSet("H4Higher", OBJPROP_LEVELCOLOR, H4HigherColor);

ObjectSet("H4Higher", OBJPROP_FIBOLEVELS,1);

ObjectSet("H4Higher", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("H4Higher", 0, "H4 HIGHER- %$");

ObjectSet("H4Higher", OBJPROP_RAY,true);

ObjectSet("H4Higher", OBJPROP_BACK,true);

ObjectSet("H4Higher", OBJPROP_COLOR,EMPTY);

if(ObjectFind("H4Lower") == -1)

ObjectCreate("H4Lower", OBJ_FIBO, 0, StartTime, LoPrice-Range, StartTime, LoPrice);

else

{

ObjectSet("H4Lower", OBJPROP_TIME2, StartTime);

ObjectSet("H4Lower", OBJPROP_TIME1, StartTime);

ObjectSet("H4Lower", OBJPROP_PRICE1,LoPrice-Range);

ObjectSet("H4Lower", OBJPROP_PRICE2,LoPrice);

}

ObjectSet("H4Lower", OBJPROP_LEVELCOLOR, H4LowerColor);

ObjectSet("H4Lower", OBJPROP_FIBOLEVELS, 1);

ObjectSet("H4Lower", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("H4Lower", 0, "H4 LOWER - %$");

ObjectSet("H4Lower", OBJPROP_RAY, true);

ObjectSet("H4Lower", OBJPROP_BACK, true);

ObjectSet("H4Lower", OBJPROP_COLOR, EMPTY);

}

se(D1HiLow)

{

if(ObjectFind("D1Higher") == -1)

ObjectCreate("D1Higher", OBJ_FIBO, 0, D1StartTime, D1HiPrice+D1Range, D1StartTime, D1HiPrice);

altrimenti

{

ObjectSet("D1Higher", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Higher", OBJPROP_TIME1, D1StartTime);

ObjectSet("D1Higher", OBJPROP_PRICE1, D1HiPrice+D1Range);

ObjectSet("D1Higher", OBJPROP_PRICE2, D1HiPrice);

}

ObjectSet("D1Higher", OBJPROP_LEVELCOLOR, D1HigherColor);

ObjectSet("D1Higher", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Higher", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("D1Higher", 0, "H4 HIGHER- %$");

ObjectSet("D1Higher", OBJPROP_RAY, true);

ObjectSet("D1Higher", OBJPROP_BACK, true);

ObjectSet("D1Higher", OBJPROP_COLOR, EMPTY);

if(ObjectFind("D1Lower") == -1)

ObjectCreate("D1Lower", OBJ_FIBO, 0, D1StartTime, D1LoPrice-D1Range, D1StartTime, 1LoPrice);

altrimenti

{

ObjectSet("D1Lower", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Lower", OBJPROP_TIME1, D1StartTime);

ObjectSet("D1Lower", OBJPROP_PRICE1, D1LoPrice-D1Range);

ObjectSet("D1Lower", OBJPROP_PRICE2, D1LoPrice);

}

ObjectSet("D1Lower", OBJPROP_LEVELCOLOR, D1LowerColor);

ObjectSet("D1Lower", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Lower", OBJPROP_FIRSTLEVEL+0,0.0); ObjectSetFiboDescription("D1Lower", 0, "H4 LOWER - %$");

ObjectSet("D1Lower", OBJPROP_RAY, true);

ObjectSet("D1Lower", OBJPROP_BACK, true);

ObjectSet("D1Lower", OBJPROP_COLOR, EMPTY);

}

/////////////////////////////////////////HILO////////

/////////////////////////////////////////MIDDLE////

se(H4Mid)

if(ObjectFind("H4Middle") == -1)

ObjectCreate("H4Middle", OBJ_FIBO, 0, StartTime, HiPrice, StartTime+PERIOD_H4*60, LoPrice);

altrimenti

{

ObjectSet("H4Middle", OBJPROP_TIME2, StartTime);

ObjectSet("H4Middle", OBJPROP_TIME1, StartTime+PERIOD_H4*60);

ObjectSet("H4Middle", OBJPROP_PRICE1, HiPrice);

ObjectSet("H4Middle", OBJPROP_PRICE2, LoPrice);

}

ObjectSet("H4Middle", OBJPROP_LEVELCOLOR, H4MiddleColor);

ObjectSet("H4Middle", OBJPROP_FIBOLEVELS,1);

ObjectSet("H4Middle", OBJPROP_FIRSTLEVEL+0,0.500); ObjectSetFiboDescription("H4Middle", 0, "H4 MIDDLE - %$");

ObjectSet("H4Middle", OBJPROP_RAY, true);

ObjectSet("H4Middle", OBJPROP_BACK, true);

ObjectSet("H4Middle", OBJPROP_COLOR, EMPTY);

}

if(D1Mid)

if(ObjectFind("D1Middle") == -1)

ObjectCreate("D1Middle", OBJ_FIBO, 0, D1StartTime, D1HiPrice, D1StartTime+PERIOD_D1*60, D1LoPrice);

altrimenti

{

ObjectSet("D1Middle", OBJPROP_TIME2, D1StartTime);

ObjectSet("D1Middle", OBJPROP_TIME1, D1StartTime+PERIOD_D1*60);

ObjectSet("D1Middle", OBJPROP_PRICE1, D1HiPrice);

ObjectSet("D1Middle", OBJPROP_PRICE2, D1LoPrice);

}

ObjectSet("D1Middle", OBJPROP_LEVELCOLOR, D1MiddleColor);

ObjectSet("D1Middle", OBJPROP_FIBOLEVELS,1);

ObjectSet("D1Middle", OBJPROP_FIRSTLEVEL+0,0.500); ObjectSetFiboDescription("D1Middle", 0, "D1 MIDDLE - %$");

ObjectSet("D1Middle", OBJPROP_RAY, true);

ObjectSet("D1Middle", OBJPROP_BACK, true);

ObjectSet("D1Middle", OBJPROP_COLOR, EMPTY);

}

/////////////////////////////////////////MIDDLE////

//+-----------------------------------------------+

//| Funzione di avvio dell'indicatore

//+-----------------------------------------------+

int start()

{

int shift = iBarShift(NULL, PERIOD_D1, Time[0]) + 1; // H4

HiPrice = iHigh(NULL, PERIOD_H4, shift);

LoPrice = iLow (NULL, PERIOD_H4, shift);

StartTime = iTime(NULL, PERIOD_H4, shift);

D1HiPrice = iHigh(NULL, PERIOD_D1, shift);

D1LoPrice = iLow (NULL, PERIOD_D1, shift);

D1StartTime = iTime(NULL, PERIOD_D1, shift);

if(TimeDayOfWeek(StartTime) == 0/*Domenica*/)

{//Aggiungi il massimo e il minimo del venerdì

HiPrice = MathMax(HiPrice, iHigh(NULL,PERIOD_H4, shift+1));

LoPrice = MathMin(LoPrice, iLow(NULL,PERIOD_H4, shift+1));

D1HiPrice = MathMax(D1HiPrice, iHigh(NULL, PERIOD_D1, shift+1));

D1LoPrice = MathMin(D1LoPrice, iLow(NULL, PERIOD_D1, shift+1));

}

Range = HiPrice - LoPrice;

D1Range = D1HiPrice - D1LoPrice;

DrawFibo();

return(0);

}

//+------------------------------+

Sotto questo allego l'originale per H4 high low mid

 

Vorrei un aiuto per favore, sto cercando di usare il delta-stop come stop loss

e trailing stop. In allegato c'è l'EA.

È possibile fare questo.

File:
 

//+------------------------------------------------------------------+

//| MODIFICATO DA Avery T. Horton, Jr. aka TheRumpledOne

//| |

//| |

//|

//

// ricerca su google "therumpledone mt4"

//

//+------------------------------------------------------------------+

//| _Fibo_Hi_Low_Middle.mq4

//| Base da spudfibo.Upgrade di Darkkiller

//: Grazie a Mladen per avermi aiutato a fare qualche correzione

//+------------------------------------------------------------------+

#proprietà indicator_chart_window

extern int myChartPeriod = 0 ;

extern string note1 = "Colori superiore, medio, inferiore";

extern color HigherColor = DeepSkyBlue;

extern color MiddleColor = Yellow;

extern color LowerColor = HotPink;

extern string note2 = "Disegnare il centro?

extern bool HiLow = true;

extern bool Mid = true;

double HiPrice, LoPrice, Range;

datetime StartTime;

stringa tChartPeriod, tHigher, tLower, tMiddle ;

int init()

{

if(myChartPeriod == 0) { myChartPeriod = Period() ; }

tChartPeriod = TimeFrameToString(myChartPeriod) ;

tHigher = tChartPeriod + "H" ;

tLower = tChartPeriod + "L" ;

tMiddle = tChartPeriod + "M" ;

return(0);

}

int deinit()

{

ObjectDelete(tHigher);

ObjectDelete(tLower);

ObjectDelete(tMiddle);

return(0);

}

//+------------------------------------------------------------------+

//| Disegna il Fibo

//+------------------------------------------------------------------+

int DrawFibo()

{

se(HiLow)

{

if(ObjectFind(tHigher) == -1)

ObjectCreate(tHigher,OBJ_FIBO,0,StartTime,HiPrice+Range,StartTime,HiPrice);

else

{

ObjectSet(tHigher,OBJPROP_TIME2, StartTime);

ObjectSet(tHigher,OBJPROP_TIME1, StartTime);

ObjectSet(tHigher,OBJPROP_PRICE1,HiPrice+Range);

ObjectSet(tHigher,OBJPROP_PRICE2,HiPrice);

}

ObjectSet(tHigher,OBJPROP_LEVELCOLOR,HigherColor);

ObjectSet(tHigher,OBJPROP_FIBOLEVELS,1);

ObjectSet(tHigher,OBJPROP_FIRSTLEVEL+0,0.0);

ObjectSetFiboDescription(tHigher,0,tChartPeriod+" HIGHER- %$");

ObjectSet(tSuperiore,OBJPROP_RAY,true);

ObjectSet(tSuperiore,OBJPROP_BACK,true);

ObjectSet(tHigher,OBJPROP_COLOR,EMPTY);

if(ObjectFind(tLower) == -1)

ObjectCreate(tLower,OBJ_FIBO,0,StartTime,LoPrice-Range,StartTime,LoPrice);

else

{

ObjectSet(tLower,OBJPROP_TIME2, StartTime);

ObjectSet(tLower,OBJPROP_TIME1, StartTime);

ObjectSet(tLower,OBJPROP_PRICE1,LoPrice-Range);

ObjectSet(tLower,OBJPROP_PRICE2,LoPrice);

}

ObjectSet(tLower,OBJPROP_LEVELCOLOR,LowerColor);

ObjectSet(tLower,OBJPROP_FIBOLEVELS,1);

ObjectSet(tLower,OBJPROP_FIRSTLEVEL+0,0.0);

ObjectSetFiboDescription(tLower,0,tChartPeriod+" LOWER - %$");

ObjectSet(tLower,OBJPROP_RAY,true);

ObjectSet(tLower,OBJPROP_BACK,true);

ObjectSet(tLower,OBJPROP_COLOR,EMPTY);

}

/////////////////////////////////////////MIDDLE///////////////////////////

se(Mid)

if(ObjectFind(tMiddle) == -1)

ObjectCreate(tMiddle,OBJ_FIBO,0,StartTime,HiPrice,StartTime+myChartPeriod*60,LoPrice);

else

{

ObjectSet(tMiddle,OBJPROP_TIME2, StartTime);

ObjectSet(tMiddle,OBJPROP_TIME1, StartTime+myChartPeriod*60);

ObjectSet(tMiddle,OBJPROP_PRICE1,HiPrice);

ObjectSet(tMiddle,OBJPROP_PRICE2,LoPrice);

}

ObjectSet(tMiddle,OBJPROP_LEVELCOLOR,MiddleColor);

ObjectSet(tMiddle,OBJPROP_FIBOLEVELS,1);

ObjectSet(tMiddle,OBJPROP_FIRSTLEVEL+0,0.500);

ObjectSetFiboDescription(tMiddle,0,tChartPeriod+" MIDDLE - %$");

ObjectSet(tMiddle,OBJPROP_RAY,true);

ObjectSet(tMiddle,OBJPROP_BACK,true);

ObjectSet(tMiddle,OBJPROP_COLOR,EMPTY);

}

//+------------------------------------------------------------------+

//| Funzione di avvio dell'indicatore

//+------------------------------------------------------------------+

int start()

{

int shift = iBarShift(NULL,myChartPeriod,Time[0]) + 1; //

HiPrice = iHigh(NULL,myChartPeriod,shift);

LoPrice = iLow (NULL,myChartPeriod,shift);

StartTime = iTime(NULL,myChartPeriod,shift);

if(TimeDayOfWeek(StartTime)==0/*Domenica*/)

{//Aggiungi il massimo e il minimo del venerdì

HiPrice = MathMax(HiPrice,iHigh(NULL,myChartPeriod,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,myChartPeriod,shift+1));

}

Range = HiPrice-LoPrice;

DrawFibo();

// Comment( "Period_", tChartPeriod ) ;

return(0);

}

//+------------------------------------------------------------------+

stringa TimeFrameToString(int tf)

{

stringa tfs;

switch(tf) {

caso PERIODO_M1: tfs="M1" ; break;

caso PERIOD_M5: tfs="M5" ; break;

caso PERIOD_M15: tfs="M15" ; break;

caso PERIOD_M30: tfs="M30" ; break;

caso PERIOD_H1: tfs="H1" ; break;

caso PERIOD_H4: tfs="H4" ; break;

caso PERIOD_D1: tfs="D1" ; break;

caso PERIOD_W1: tfs="W1" ; break;

caso PERIOD_MN1: tfs="MN";

}

return(tfs);

}

Ecco come ho fatto.

P.S. perché i miei allegati vengono cancellati?

File:
highlower.gif  14 kb
 

MoveStopOnce

Ciao, sto cercando di far funzionare questo codice MoveStopOnce ma le compravendite non sembrano essere modificate dal codice, solo le compravendite. C'è qualcosa che non va?

//Buys

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

[/code]

[code]

//Sells

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

 

MoveStopOnce

Ho avuto questo problema.

Penso che dobbiate aggiungere

if (OrderType() == OP_BUY)

E usare OP_SELL per il codice di vendita.

Grande essere

 
Big Be:
Ho avuto questo problema.

Penso che dobbiate aggiungere

if (OrderType() == OP_BUY)

E usare OP_SELL per il codice di vendita.

Grande essere

Ok, lo proverò quando torno a casa, ma allora perché funziona già con gli ordini Buy?

Grazie

Motivazione: