Como codificar? - página 96

 
 

Olá a todos,

Esta é uma questão de codificação estúpida, e sei que já a vi em algum lugar antes, mas preciso de ajuda.

Estou codificando um indicador personalizado, e tudo que quero que ele faça é ler o preço de licitação atual a SOMENTE O INÍCIO de uma NOVA barra. Não posso simplesmente usar Open[0] porque cada vez que um novo tick entrar nele, ele continuará retornando o valor aberto para a barra atual. Quero que o valor seja devolvido apenas uma vez, até que uma nova barra seja formada.

Sei que estou perdendo algo bastante simples aqui, mas estou tendo um pouco de dificuldade para descobrir isso. Alguém poderia me ajudar?

Obrigado,

-wolfe

 
wolfe:
Olá a todos,

Esta é uma questão de codificação estúpida, e sei que já a vi em algum lugar antes, mas preciso de ajuda.

Estou codificando um indicador personalizado, e tudo que quero que ele faça é ler o preço de licitação atual a SOMENTE O INÍCIO de uma NOVA barra. Não posso simplesmente usar Open[0] porque cada vez que um novo tick entrar nele, ele continuará retornando o valor aberto para a barra atual. Quero que o valor seja devolvido apenas uma vez, até que uma nova barra seja formada.

Sei que estou perdendo algo bastante simples aqui, mas estou tendo um pouco de dificuldade para descobrir isso. Alguém poderia me ajudar?

Obrigado,

-wolfe

Basta armazenar o tempo atual da barra (Tempo[0]) - quando este valor mudar, você tem uma nova barra, então obtenha seu preço, armazene um novo valor e repita...

 
omelette:
Basta armazenar o tempo atual do bar (Tempo[0]) - quando este valor muda, você tem um novo bar, então obtenha seu preço, armazene um novo valor e repita...

Obrigado omelete,

Eu deveria ter pensado nisso, um pouco decepcionado comigo mesmo!

Obrigado pela ajuda!

 

Alguém mais pode me mostrar o que estou fazendo de errado com este código?

Eu gostaria de acrescentar mais tempo a ele, como se fosse um prazo Diário, mas eu não sei o que está errado.

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

//| #MTF_Hi_Low_Middle.mq4

//| Base from spudfibo.Upgrade by Darkkiller

//: Obrigado à Mladen por me ajudar a fazer alguma correção

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

#janela_do_cartão_indicador de propriedade

nota de corda externa1 = "H4 Cores superiores, médias e inferiores";

cor externa H4HigherColor = DeepSkyBlue;

cor externa H4MiddleColor = Amarelo;

cor externa H4LowerColor = Rosa Quente;

nota de corda externa2 = "Desenho H4 Superior,Inferior e Médio...";

bool externo H4HiLow = verdadeiro;

bool externo H4Mid = verdadeiro;

nota de corda externa3 = "D1 Cores Superior,Média,Inferior...";

cor externa D1HigherColor = DeepSkyBlue;

cor externa D1MiddleColor = Amarelo;

cor externa D1LowerColor = Rosa Quente;

nota de corda externa4 = "Desenho D1 Superior,Inferior e Médio...";

bool externo D1HiLow = verdadeiro;

bool externo D1Mid = verdadeiro;

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

data/hora de inícioTempo;

int init()

{

retorno(0);

}

int deinit()

{

ObjectDelete("H4Higher");

ObjectDelete("H4Lower");

ObjectDelete("H4Middle");

ObjectDelete("D1Higher");

ObjectDelete("D1Lower");

ObjectDelete("D1Middle");

return(0);

}

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

///| Desenhar Fibo

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

int DrawFibo()

{

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

if(H4HiLow)

{

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

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

mais

{

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- %$");

ObjetoSet("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);

mais

{

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, verdadeiro);

ObjectSet("H4Lower", OBJPROP_BACK, true);

ObjectSet("H4Lower", OBJPROP_COLOR, VAZIO);

}

if(D1HiLow)

{

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

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

mais

{

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, verdadeiro);

ObjectSet("D1Higher", OBJPROP_BACK, true);

ObjectSet("D1Higher", OBJPROP_COLOR, VAZIO);

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

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

mais

{

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, verdadeiro);

ObjectSet("D1Lower", OBJPROP_BACK, true);

ObjectSet("D1Lower", OBJPROP_COLOR, VAZIO);

}

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

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

if(H4Mid)

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

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

mais

{

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, VAZIO);

}

if(D1Mid)

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

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

mais

{

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, verdadeiro);

ObjectSet("D1Middle", OBJPROP_BACK, true);

ObjectSet("D1Middle", OBJPROP_COLOR, VAZIO);

}

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

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

//| Função de partida do indicador

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

int start()

{

int shift= iBarShift(NULL, PERÍODO_D1, Tempo[0]) + 1;// H4

HiPrice= iHigh(NULL, PERÍODO_H4, turno);

LoPrice= iLow(NULL, PERÍODO_H4, turno);

StartTime= iTime(NULL, PERÍODO_H4, turno);

D1HiPrice = iHigh(NULL, PERÍODO_D1, turno);

D1LoPrice = iLow(NULL, PERÍODO_D1, turno);

D1StartTime = iTime(NULL, PERÍODO_D1, turno);

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

{//Adicionar sextas-feiras altas e baixas

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

LoPrice = MathMin(LoPrice, iLow(NULL,PERÍODO_H4, turno+1));

D1HiPreço = MathMax(D1HiPreço, iHigh(NULL,PERÍODO_D1, turno+1));

D1LoPrice = MathMin(D1LoPrice, iLow(NULL, PERÍODO_D1, shift+1));

}

Faixa = HiPrice - LoPrice;

D1Range = D1HiPrice - D1LoPrice;

DrawFibo();

retorno(0);

}

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

Abaixo anexar o original para H4 alta baixa média

 

Gostaria de alguma ajuda, por favor, estou tentando usar o delta-stop como uma parada de perda.

e parada de trilha. Em anexo, encontra-se a EA.

É possível fazer isto.

Arquivos anexados:
 

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

//| MODIFICADO POR Avery T. Horton, Jr. aka TheRumpledOne |

//| |

//| |

//|

//

// google search "therumpledone mt4"

//

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

//| _Fibo_Hi_Low_Middle_Middle.mq4

//| Base from spudfibo.Upgrade by Darkkiller

//: Obrigado à Mladen por me ajudar a fazer alguma correção

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

#janela_do_cartão_indicador de propriedade

externo no myChartPeriod = 0 ;

nota de corda externa1 = "Cores superiores, médias e inferiores";

cor externa HigherColor = DeepSkyBlue;

cor externa MiddleColor = Amarelo;

cor externa LowerColor = HotPink;

nota de corda externa2 = "Draw middle?";

bool externo HiLow = verdadeiro;

bool externo Médio = verdadeiro;

duplo HiPrice, LoPrice, Range;

data/hora InícioTempo;

tChartPeriodo da corda, tHigher, tLower, tMiddle ;

int init()

{

if(myChartPeriod == 0) { myChartPeriod = Período() ; }

tChartPeriod = TimeFrameToString(myChartPeriod) ;

tHigher = tChartPeriod + "H" ;

tLower = tChartPeriod + "L" ;

tMédio = tPeriodoCartPeriodo + "M" ;

retorno(0);

}

int deinit()

{

ObjectDelete(tHighher);

ObjectDelete(tLower);

ObjectDelete(tMiddle);

return(0);

}

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

///| Desenhar Fibo

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

int DrawFibo()

{

if(HiLow)

{

if(ObjectFind(tHigher) == -1)

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

mais

{

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(tHigher,OBJPROP_RAY,true);

ObjectSet(tHigher,OBJPROP_BACK,true);

ObjectSet(tHigher,OBJPROP_COLOR,EMPTY);

if(ObjectFind(tLower) == -1)

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

mais

{

ObjectSet(tLower,OBJPROP_TIME2, StartTime);

ObjectSet(tLower,OBJPROP_TIME1, StartTime);

ObjectSet(tLower,OBJPROP_PRICE1,LoPrice-Range);

ObjectSet(tLower,OBJPROP_PRICE2,LoPrice-Range);

}

ObjectSet(tLower,OBJPROP_LEVELCOLOR,LowerColor);

ObjectSet(tLower,OBJPROP_FIBOLEVELS,1);

ObjectSet(tLower,OBJPROP_FIRSTLEVEL+0,0.0); 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///////////////////////////

if(Meio)

if(ObjectFind(tMiddle) == -1)

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

mais

{

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);

}

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

//| Função de partida do indicador

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

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/*Domingo*/)

{//Adicionar sextas-feiras altas e baixas

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

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

}

Faixa = HiPrice-LoPrice;

DrawFibo();

// Comentário( "Período_", tChartPeriod ) ;

retorno(0);

}

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

String TimeFrameToString(int tf)

{

tfs. de corda;

switch(tf) {

caso PERÍODO_M1: tfs="M1" ; pausa;

caixa PERÍODO_M5: tfs="M5" ; pausa;

caixa PERÍODO_M15: tfs="M15" ; pausa;

caixa PERÍODO_M30: tfs="M30" ; pausa;

caixa PERÍODO_H1: tfs="H1" ; pausa;

caixa PERÍODO_H4: tfs="H4" ; pausa;

caixa PERÍODO_D1: tfs="D1" ; pausa;

caixa PERÍODO_W1: tfs="W1" ; pausa;

caixa PERÍODO_MN1: tfs="MN";

}

retorno(tfs);

}

Foi assim que eu o fiz.

P.S. por que meus anexos estão sendo apagados?

Arquivos anexados:
highlower.gif  14 kb
 

MoveStopOnce

Olá, tentando fazer este código MoveStopOnce funcionar, mas o comércio Sell não parece ser modificado pelo código, apenas o Buys. Alguma coisa errada?

//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

Eu já tive este problema.

Acho que você precisa acrescentar:

se (OrderType() == OP_BUY)

E use OP_SELL para o código de venda.

Grande Seja

 
Big Be:
Eu já tive este problema.

Acho que você precisa acrescentar:

se (OrderType() == OP_BUY)

E use OP_SELL para o código de venda.

Grande Seja

Ok, vou tentar quando chegar em casa, mas então por que ainda funciona com os pedidos de compra já?

Obrigado