Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 56
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu ainda estou refinando:
se a condição for verdadeira
ordem em aberto 1
se o preço mudou para onde deveria ou não
ordem em aberto 2
LastLot= pedido 2 (ou número maior)
LastPrice= pedido2 (ou número maior)
Se o preço mudou ou não para onde deveria ter mudado...
LastLot= pedido 3 (ou número maior)
LastPrice= pedido 3 (ou número maior)
O problema é que a última (ou não) ordem estará sempre entre uma StopLoss e uma TakeOut, o que significa que ela não será reinicializada quando as outras fecharem porque a própria ordem ainda estará lá. Como ligá-lo aos outros se não soubermos o número de pedidos?
O mecanismo de ligar o último primeiro ou penúltimo aos outros provou ser ineficiente, uma vez que seu número muda junto com os números.
O resultado deve ser algo como "se alguma ordem da série em questão tiver sido fechada, feche todas as outras".
Verificação em série - a primeira ordem da direção atual (outra ordem não será aberta) - ou um identificador adicional ou alguns outros métodos de ligação devem ser usados aqui. A chave - a primeira ordem é aberta de acordo com as condições, o resto das ordens são auxiliares.
alguma reflexão?
Eu ainda estou refinando:
se a condição for verdadeira
ordem em aberto 1
se o preço mudou para onde deveria ou não
ordem em aberto 2
LastLot= pedido 2 (ou número maior)
LastPrice= pedido2 (ou número maior)
Se o preço mudou ou não para onde deveria ter mudado...
LastLot= pedido 3 (ou número maior)
LastPrice= pedido 3 (ou número maior)
O problema é que a última (ou não) ordem estará sempre entre uma StopLoss e uma TakeOut, o que significa que ela não será reinicializada quando as outras fecharem porque a própria ordem ainda estará lá. Como ligá-lo aos outros se não soubermos o número de pedidos?
O mecanismo de ligar o último primeiro ou penúltimo aos outros provou ser ineficiente, uma vez que seu número muda junto com os números.
O resultado deve ser algo como "se alguma ordem da série em questão foi fechada, feche todas as outras".
Verificação em série - a primeira ordem da direção atual (outra ordem não será aberta) - ou um identificador adicional ou alguns outros métodos de ligação devem ser usados aqui. A chave - a primeira ordem é aberta de acordo com as condições, o resto das ordens são auxiliares.
Alguma idéia?
Não está claro. Tente expressar seus pensamentos de forma mais clara.
Aqui o temos:"Se o preço seguir o caminho certo ou não, devemos abrir a ordem 2" - como devemos entender quedevemos abrir a ordem 2 em qualquer caso?
E vamos ter cada vez mais "ou então".
E se não quisermos ter perguntas como"Como ligá-lo aos pedidos restantes quando o valor do preço é desconhecido", devemos descobrir primeiro o valor.
É confuso, incompreensível. Tente deixar seus pensamentos mais claros.
Isto"se o preço se moveu na direção certa ou não - para abrir ordem2" - como você entende que em qualquer caso"para abrir ordem2"?
E vamos ter cada vez mais "ou então".
E se não quisermos entrar em questões como"Como conectar com os pedidos restantes se não soubermos o valor", devemos primeiro descobrir o valor.
OK, com números
EURUSD=1.10000
um comando para abrir uma ordem de compra de acordo com o TP (já escrito)
se EURUSD=1.10200 nós damos uma ordem de compra (já escrita)
se EURUSD=1,09800 para "comprar" (já está escrito)
e assim por diante com uma etapa de 200
se qualquer uma das ordens for fechada (as paradas e aquisições são definidas, mas não em todas elas)
Feche a grade inteira
procurando uma maneira de identificar a gradeOK, com números
EURUSD=1.10000
comando para abrir uma ordem de compra de acordo com a ordem atual (já escrita)
se EURUSD=1.10200 para adicionar ao pedido de compra (já escrito)
se EURUSD=1,09800 para "comprar" (já está escrito)
e assim por diante com um passo de 200
se alguma das ordens for encerrada (paradas e aquisições já estão definidas)
fechar toda a grade
buscando uma maneira de identificar a gradeComentários com o número do pedido podem ser adicionados. E se toda a série de pedidos de um tipo - então eles devem simplesmente recalculá-los e fixar a quantidade.
Eu estava pensando em comentários, mas a julgar pelo feedback, o chef acha que eles não são comestíveis e os elimina ou os muda para os seus próprios comentários
E quanto à contagem, então eu tenho que contar e registrar o número ao adicionar outro?
e sobre a contagem, eu tenho que contar e registrar a quantidade quando eu adicionar outra?
Sim. E se o número diminuiu desde a última vez - feche todos os demais.
Você também pode monitorar as ordens fechadas no histórico. E feche a série quando surgir uma nova ordem que atenda às características especificadas.
Você também não pode definir TP/SL na ordem, mas calcular o TP/SL total no Expert Advisor para toda a série. Utilize-os para fechar a série. As vantagens - a corretora não vê os níveis de ruptura, e o problema de encontrar a série permanece se um TP ou um SL tiver acionado em um pedido.double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
OK, deixe-me fazer-lhe uma pergunta simples. Como faço para configurar o EA para calcular automaticamente o lote dependendo da alavancagem. Digamos que a alavancagem é 1:50, o depósito é 3000...
Experimente assim:
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}