Ajuda na codificação - página 157

 
mladen:
Christoff

Dessa forma a variável Decimals deve estar OK

Em qualquer caso, verifique qual código de erro você está recebendo em um caso de fechamento (parcial) sem sucesso do pedido

Mladen,

Obrigado pela dica.

O problema é que não há mensagem de erro. Quando não funciona, parece que a função PartialTP não foi sequer chamada. Outras vezes - geralmente nas primeiras ordens após o reinício da EA - ela funciona bem.

Pensei que talvez uma das variáveis não voltasse ao valor zero, ou algo parecido, mas ainda não consegui encontrar o bug.

 
chrisstoff:
Mladen,

Obrigado pela dica.

O problema é que não há mensagem de erro. Quando não funciona, parece que a função PartialTP não foi sequer chamada. Outras vezes - geralmente nas primeiras ordens após o reinício da EA - ela funciona bem.

Pensei que talvez uma das variáveis não voltasse ao valor zero, ou algo parecido, mas ainda não consegui encontrar o bug.

chrisstoff

Desculpe, mas com um código parcial eu não posso ajudar mais.

O que você está descrevendo significa que existe a necessidade de depurar o código - e isso só pode ser feito executando-o enquanto se utiliza algum tipo de ponto de controle

 
mladen:
chrisstoff

Desculpe, mas com um código parcial eu não posso ajudar mais.

O que você está descrevendo significa que existe a necessidade de depurar o código - e isso só pode ser feito executando-o enquanto se utiliza algum tipo de ponto de controle

Obrigado, Mladen.

É reconfortante que você não tenha visto problemas no código.

Acho que todas as partes relevantes do código foram postadas, então tenho que encontrar o bug em outro lugar.

 
mladen:
hock87

Por favor, leia o post acima de seu post para uma solução desse problema

O código completo para isso é o seguinte :

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

Malden,

Se eu quiser abrir lotes de tamanho em uma porcentagem do saldo da minha conta, como codificá-los?

Exemplo:

O saldo da minha conta é de $500,

quero abrir um lote com 5%, depois conta automaticamente e abre os lotes de $0,25, TP=10 SL=20.

Como codificá-lo?

Obrigado.

 
hock87:
Malden,

Se eu quiser abrir lotes de tamanho em uma porcentagem do saldo da minha conta, como codificá-los?

Exemplo:

O saldo da minha conta é de $500,

quero abrir um lote com 5%, depois conta automaticamente e abre os lotes de $0,25, TP=10 SL=20.

Como codificá-lo?

Obrigado.

Você pode usar uma função como esta para isso :

double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss tem que ser passado para a função já em pips/pontos (não em valores inteiros)

 
mladen:
Você pode usar uma função como esta para isso:
double getLots(double stopLoss, double risk)

{

RefreshRates();

double pPoint = MarketInfo(Symbol(),MODE_POINT);

double step = MarketInfo(Symbol(),MODE_LOTSTEP);

double minLot = MarketInfo(Symbol()l,MODE_MINLOT);

double maxLot = MarketInfo(Symbol(),MODE_MAXLOT);

double lots = minLot;

if (risk>0 && stopLoss>0)

{

lots = AccountFreeMargin()*(risk/100.0)/(stopLoss*MarketInfo(s_symbol,MODE_TICKVALUE)/pPoint);

}

}

return(MathMax(MathMin(lots,maxLot),minLot));

}

PS: stopLoss tem que ser passado para a função já em pips/pontos (não em valores inteiros)

Obrigado, Mladen.

Mas eu não consegui compor o código para comprar o código do pedido.

Parece haver muitos erros e avisos.

Como compor o código?

Obrigado, Mladen.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
 
hock87:
Obrigado, Mladen.

Mas eu não consegui compor o código para comprar o código do pedido.

Parece haver muitos erros e avisos.

Como compor o código?

Obrigado.

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point);

prof=(Ask+profsize*Point);

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}

Experimente assim (testei-o agora e funciona) :

extern double lots = 0.1;extern double stopsize = 20;

extern double profsize = 10;

int err;

int ticket;

double stop;

double prof;

int init() { return(0); }

int deinit() { return(0); }

int start()

{

int TotalOrders = 0;

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

{

if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

if (OrderSymbol() == Symbol())

TotalOrders++;

}

if (TotalOrders<1)

{

ticket=OrderSend(Symbol(), OP_BUY, lots, Ask, 3, 0, 0, NULL,LimeGreen);

stop=(Ask-stopsize*Point*MathPow(10,Digits%2));

prof=(Ask+profsize*Point*MathPow(10,Digits%2));

OrderModify( ticket, OrderOpenPrice(), stop, prof, 0, Blue);

}

err=GetLastError();

// Comment("This is a test ", err, " ", stop, " ", prof);

Comment(" ");

}
Arquivos anexados:
_test_1.mq4  1 kb
test_1.gif  78 kb
 

caros mladen e mr. tools pls,

é possível criar uma ea que dá sinal baseado em certas condições como os sinais de 3 ou 4 indicadores que atendem a condições pré-definidas.

Por exemplo

quero que a ea sinalize uma galinha de compra:

ema 8 cross ema 21

qqe acima de 0

non lag ma é verde

e a vela está acima da nuvem de ichimoku

a EA não deve abrir negócios, mas apenas dar o sinal quando as condições estabelecidas forem cumpridas

 

Obrigado, Mladen.

Eu já experimentei.

mas ele ainda abre os lotes com $0,1

Eu querotamanhos de lotes abertos em uma porcentagem do saldo daminha conta.

EX:o saldo da conta tem $500.

abre um lote com 5%, depois conta automaticamente e abre os lotes de $0,25, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0,25

Depois abre automaticamente lotes de $0,25 e TP=10 SL=20.

Como criá-lo?

Obrigado.

 
hock87:
Obrigado, Mladen.

Eu tentei.

mas ele ainda abre os lotes com $0,1

Quero abrir oslotes com um percentual do saldo da minha conta.

EX:o saldo da conta tem $500.

abrir um lote com 5%, depois conta automaticamente e abrir os lotes de $0,25, TP=10 SL=20.

LotSizeSlot1 = AccountBalance() * (RiskSlot1 / 100)

LotSizeSlot1 = $500*(5%/100)

LotSizeSlot1 = $ 0,25

Depois abre automaticamente lotes de $0,25 e TP=10 SL=20.

Como criá-lo?

Obrigado.

Como no anexo

Arquivos anexados:
_test_2.mq4  2 kb