Como codificar? - página 324

 
mladen:
Não tão fácil de explicar

Você tem que enviar um evento para o gráfico offline que o "dirá" (a partir de seu indicador) que um novo tick é gerado e que ele deve executar as rotinas necessárias. Isso significa usar funções de baixo nível. A coisa toda pode parecer algo parecido com isto :

#include

#import "user32.dll"

int GetParent(int hWnd);

#import

#define CHART_CMD_UPDATE_DATA 33324

void UpdateChartWindows()

{

int filePeriod = 1; // file period

string fileSymbol = "your offline symbol name";

string chartName = "your offline symbol chart full name";

string stringForName = " ";

//

//

//

//

//

int windowHandle = WindowHandle(fileSymbol,filePeriod);

if (windowHandle != 0)

{

windowHandle = GetParent(windowHandle);

windowHandle = GetWindow(windowHandle,GW_HWNDFIRST);

while (windowHandle != 0)

{

int len = GetWindowTextA(windowHandle,stringForName,80);

if (len > 0 && StringSubstr(stringForName,0,len) == chartName)

PostMessageA(windowHandle,WM_COMMAND,CHART_CMD_UPDATE_DATA,0);

windowHandle = GetWindow(windowHandle,GW_HWNDNEXT);

}

}

}

Obrigado, vou verificar isso. No entanto, eu acho o problema para o sendorder corretamente. Meu indicador cria um nome para o gráfico offline não padrão e as plataformas não o abrem por este motivo.

Obrigado por sua disponibilidade.

 

Ok, a questão para o gráfico off-line está em andamento.

Eu tenho outro problema.

Tenho que criar um indicador que calcule os volumes com regras específicas.

O que eu preciso é que toda vez que houver uma variação do tick, o indicador deve contar o comprimento do balanço.

Exemplo.

em Open candel, o valor do buffer é 0. Portanto, ele deve contar todo o tick feito antes de um retracement, mas o valor final retornado é o mais alto desde que a vela se fecha.

Depois, ele deve definir a cor do histograma liberado o movimento feito com o maior valor retornado do buffer.

Eu tento de maneira diferente, mas sem sucesso.

Heeeeelp ^^.

Obrigado.

 

Obrigado por todo o seu apoio. Estou aprendendo mais e com toda a sua ajuda eu conserto todo o meu pedido...MAS.

Eu tenho outro ^^.

Preciso engradar uma função vazia para lembrar e ela tem que ser a fusão deste dois códigos.

O primeiro encontra a última ordem aberta. e o segundo encontra o número da ordem aberta que tem o preço aberto mais alto.

Preciso fazer uma função para ter diretamente o número da ordem que tem o preço mais alto de ordem aberta.

Obrigado.

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

[PHP]for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

 
dasio:
Obrigado por todo o seu apoio. Estou aprendendo mais e com toda a sua ajuda eu conserto todo o meu pedido...MAS.

Eu tenho outro ^^.

Preciso engradar uma função vazia para lembrar e ela tem que ser a fusão destes dois códigos.

O primeiro encontra a última ordem aberta. e o segundo encontra o número da ordem aberta que tem o preço aberto mais alto.

Preciso fazer uma função para ter diretamente o número da ordem que tem o preço mais alto de ordem aberta.

Obrigado.

for(int i = OrdersTotal()-1; i>= 0; i--) {

OrderSelect(i, SELECT_BY_POS);

if(OrderSymbol() == Symbol() && OrderType() == TYPE ) {

if(TYPE == OP_BUY) {

double OPrice = OrderOpenPrice();[/PHP]

for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>test(OP_BUY) Hbuys++;

}

}

}

return(Hbuys);

}

Eu cometi um erro no segundo código. Está certo.

[PHP]for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

devolução(Hbuys);

}

 

dasio

A função nula é uma função que não retorna nenhum valor. Se esse for o caso, então a única maneira razoável de fazer isso é usar alguma variável que será passada por referência à função (na minha experiência, usar variáveis de escopo global para esse fim é uma prática muito ruim - evita regras de codificação estruturadas e, em casos em que é preciso procurar o erro, é um pesadelo quando tais variáveis são usadas). É isso que você tinha em mente?

dasio:
Eu cometi um erro no segundo código. Está certo.
for(int e=0;e<OrdersTotal();e++) {

if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol() == Symbol() && OrderType() == TYPE) {

if(TYPE == OP_BUY) {

if(OrderOpenPrice()>OPrice Hbuys++;

}

}

}

return(Hbuys);

}

 
mladen:
A função dasiovoid é uma função que não retorna nenhum valor. Se esse for o caso, então a única maneira razoável de fazer isso é usar alguma variável que será passada por referência à função (na minha experiência, usar variáveis de escopo global para esse fim é uma prática muito ruim - evita regras de codificação estruturadas e, em casos em que é preciso procurar o erro, é um pesadelo quando tais variáveis são usadas). É isso que você tinha em mente?

Obrigado por sua resposta,

Preciso apenas do número de compras que têm maior ordem aberta e menor openorderm respeitar a última ordem de compra aberta.

devo usar o resultado como moltiplicador em uma função vois para alguma verificação.

Portanto, é muito mais simples recordar este registro quando solicitado. Talvez desta forma, para que eu possa recordá-lo simplesmente CalculateCurrentBuy(Símbolo())

int CalculateHighestbuy(string symbol) {

int Hopen=0;

for(int i=0;i<OrdersTotal();i++) {

code here

}

}

return(Hopen);

}

 

grade de fuga?

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

Este código irá rastrear 2 pedidos, mas como posso modificá-lo para rastrear mais? Assim que eu tentar configurar o código de rastreamento para vários níveis como o código da grade acima dele se transforma em custard.

Qualquer idéia seria bem-vinda.

Cumprimentos ao CJA

 

...

... cja

Eu tentei com o seguinte código e funciona bem (veja a figura de exemplo: diferentes etapas já aplicadas)

Não sabia o que são variáveis s.ticketP e b.ticketP para utilizá-lo da maneira que você pode ver no código

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

cja:
for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){

OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Ask-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){

OrderSend(Symbol(),OP_BUYSTOP,Buy.Lots+i*Buy.Multiplier,Bid+i*(Trail.BUYSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

}[/CODE]

I can set a grid using the above code but how do I get the Buy Grid and Sell grid grid to trail independently or as a set and retain the separate grid spacing? I have tried all sorts of things and must be missing something obvious. All I get is either all the pending orders move to the same level and then trail as a group or the pending orders start moving up and down with the price action.

[CODE] void TrailingOrders() {

if (Trail.BUYSTOP.Orders && OrderType()==OP_BUYSTOP) {

if (OrderOpenPrice()-Ask>(Trail.BUYSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Ask+OrderOpenPrice()+(Trail.BUYSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Aqua);

}

}

if (Trail.SELLSTOP.Orders && OrderType()==OP_SELLSTOP) {

if (Bid-OrderOpenPrice()>(Trail.SELLSTOP.Orders.Distance)*myPoint) {

OrderModify(OrderTicket(),Bid-OrderOpenPrice()-(Trail.SELLSTOP.Orders.Distance)*myPoint,OrderStopLoss(),OrderTakeProfit(), 0, Yellow);

}

}

}

Este código irá rastrear 2 pedidos, mas como posso modificá-lo para rastrear mais? Assim que eu tentar configurar o código de rastreamento para vários níveis, como o código de grade acima dele se transforma em creme de leite.

Qualquer idéia seria bem-vinda.

Cumprimentos à CJA
Arquivos anexados:
stopd.gif  36 kb
 

Grelha de Reboque

mladen:
cja

Eu tentei com o seguinte código e funciona bem (veja a figura de exemplo: diferentes etapas já aplicadas)

Não sabia o que são variáveis s.ticketP e b.ticketP para utilizá-lo da maneira que você pode ver no código

extern double Trail.SELLSTOP.Orders.Distance = 15;

extern double Trail.BUYSTOP.Orders.Distance = 20;

extern int Stop.Order.Levels = 4;

extern double Sell.Lots = 0.1;

extern double Sell.Multiplier = 0.1;

extern double Buy.Lots = 0.1;

extern double Buy.Multiplier = 0.2;

extern bool Set.SELLSTOP = true;

extern bool Set.BUYSTOP = true;

int init()

{

return(0);

}

int start()

{

double myPoint=1; if (Digits==3 || Digits==5) myPoint=10; myPoint *= Point;

static int s.ticketP=0;

static int b.ticketP=0;

for(int i = 1; i < Stop.Order.Levels+1; i++)

{

if(Set.SELLSTOP && s.ticketP==0){ OrderSend(Symbol(),OP_SELLSTOP,Sell.Lots+i*Sell.Multiplier,Bid-i*(Trail.SELLSTOP.Orders.Distance)*myPoint,0,0,0,0,0,0,CLR_NONE);}

if(Set.BUYSTOP && b.ticketP==0){ OrderSend(Symbol(),OP_BUYSTOP ,Buy.Lots+i *Buy.Multiplier ,Ask+i*(Trail.BUYSTOP.Orders.Distance)*myPoint ,0,0,0,0,0,0,CLR_NONE);}

}

s.ticketP=Stop.Order.Levels;

b.ticketP=Stop.Order.Levels;

return(0);

}

Oi mladen,

Obrigado por sua ajuda, porém posso não ter me feito muito claro em meu posto acima. Não tenho nenhum problema em estabelecer uma grade, pois o problema que tenho é o de seguir a grade sem perder a separação de pedidos.

s.ticketP & b.ticketP simplesmente se refere ao código de pedidos pendentes BUYSTOP & SELLSTOP usado em outro lugar na EA.

Cumprimentos à CJA

 

Grelha de Reboque

cja:
Oi mladen,

Obrigado por sua ajuda, porém posso não ter me feito muito claro em meu posto acima. Não tenho nenhum problema em estabelecer uma grade, pois o problema que tenho é o de seguir a grade sem perder a separação de pedidos.

s.ticketP & b.ticketP simplesmente se refere ao código de pedidos pendentes BUYSTOP & SELLSTOP usado em outro lugar na EA.

Cumprimentos à CJA

Oi mladen,

Alguma hora para dar uma olhada nisto?

Cumprimentos amigáveis CJA

Razão: