[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 768
Só preciso chamar a função, só preciso de uma linha: "Se houver mais pedidos do que um .... e isso é tudo" - e você está me oferecendo uma função completa
Eis como eu guardo meus dados de pedido
É simples, ponha-o na biblioteca.
O tipo de uma ordem a ser contada e seu mestre é dado como entrada, ele retorna o número de ordens abertas ou definidas.
int ChPos( int TypePos,int Magic)
{
// возвращает кол-во позицй которые открыты или выставленн отложками с магиком Magic int i;
int count=0 ;
for( i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
{
if(OrderType()==OP_BUY && TypePos==OP_BUY && Magic==OrderMagicNumber()){count++;}
if(OrderType()==OP_SELL && TypePos==OP_SELL && Magic==OrderMagicNumber()){count++;}
if(OrderType()==OP_BUYLIMIT && TypePos==OP_BUYLIMIT && Magic==OrderMagicNumber()){count++;}
if(OrderType()==OP_BUYSTOP && TypePos==OP_BUYSTOP && Magic==OrderMagicNumber()){count++;}
if(OrderType()==OP_SELLLIMIT && TypePos==OP_SELLLIMIT && Magic==OrderMagicNumber()){count++;}
if(OrderType()==OP_SELLSTOP && TypePos==OP_SELLSTOP && Magic==OrderMagicNumber()){count++;}
}
}
return(count);
}
Você pode utilizá-lo da seguinte maneira
if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
A entrada é o tipo de ordem a ser contada e seu mestre, ele retorna o número de ordens abertas ou definidas.
Isto pode ser usado da seguinte maneira
if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
Eu tenho essa função e não preciso dela, só preciso apenas uma linha "se houver mais pedidos do que um .... então" e é isso
meus dados para a mesma função que você mostrou estão armazenados aqui
int total_order; // переменная в которой хранится общее количество открытых ордеров в терминалеint my_total_order; // переменная в которой хранится общее количество открытых ордеров с нашим Magic
se (sua condição && aaaa < OrderHistoryTotal()+ OrderTotal() )
{
operadores
aaa=OrdensHistóriaTotal()+ OrdensTotal()
}
Se assim for, é ainda melhor colocá-lo em uma função com os mágicos em mente. Você pode nos dizer em que está trabalhando? A lógica é um pouco estranha se eu acertar, quando mais um pedido é aberto, não é mais fácil abrir pedidos não maiores que OpenPosition?
Sua função retorna o número total de ordens abertas e ordens pendentes. Quantas ordens OP_BUY, se houver OP_BUYLIMIT OP_SELLLLIMIT OP_SELLL etc. não aparece.
Por favor, note que está destacado em vermelho . O tipo de ordens comerciais é o mesmo e as variáveis no tubo são definidas de forma diferente, é assim que deve ser.
ivandurak: Observe o que está destacado em vermelho . O tipo de ordens comerciais é o mesmo e as variáveis no tubo são diferentes, é assim que deve ser.
Sim, deve ser, porque há diferentes funções de abertura e eu não faço um pedido de OrderType () e pedi a bandeira se ela está aberta, mas o problema não está nesta função porque os outros pedidos também não funcionam esta que eu lancei pela primeira vez, E NA MESMA FUNÇÃO ABERTA NORMALMENTE
O problema parece estar em outro lugar. Mas eu acho que preciso ver o código.
Definitivamente não está em outro lugar, tudo o resto funciona, mas o problema é que o pedido (HaveBuyLimitOrderEnd=== verdadeiro) está errado, então estou me perguntando como dizer para modificar e excluir,
Sim, deve ser, porque existem diferentes funções de abertura e eu não faço um pedido de OrderType () e pedi a bandeira se ela está aberta, mas o problema provavelmente não está nesta função porque os outros pedidos também não funcionam esta que eu lancei pela primeira vez, E NA MESMA FUNÇÃO ABERTA NORMALMENTE
ENTÃO O PROBLEMA É COM A CONSULTA NO OPERADOR
if(bt==1&&bl==7)
{OpenBuyStopOrder(Lot,PRBidS);OpenBuyLimitOrder(Lot*3,PRAskL); if (HaveBuyLimitOrderEnd== true)
{ModifyBuyStopOrder(PRAskS); // Выбираем
} }
Será que em funções marcadas em vermelho HaveBuyLimitOrderEnd está definido no tubo? Caso contrário, você precisa ligar para Myorders() antes de if. Caso contrário, você não sabe o que existe. E, só por precaução, as bandeiras (variáveis)
HaveBuyOrder = falso; HaveSellOrder = falso; HaveBuyStopOrder = falso; HaveSellStopOrder = falso; HaveBuyLimitOrder = falso; HaveSellLimitOrder = falso; HaveBuyLimitOrderEnd = falso; HaveSellLimitOrderEnd = falso; deve ser definido a nível global .
Pergunto-me se a bandeira HaveBuyLimitOrderEnd está colocada em vermelho no cano. Caso contrário, você precisa chamar Myorders() antes de if. Caso contrário, você não sabe o que existe. E só por precaução, bandeiras (variáveis)
bool HaveBuyOrder; // bandeira se houver ordens de compra no mercado aberto bool HaveSellOrder; // bandeira de ordens de mercado aberto para vender bool HaveBuyStopOrder; // bandeira de ordens de compra em aberto pendentes bool HaveSellStopOrder; // bandeira de ordens pendentes de venda bool HaveBuyLimitOrder; // bandeira de ordens de compra em aberto pendentes bool HaveSellLimitOrder; // bandeira de ordens pendentes Sell bool HaveBuyLimitOrderEnd; // bandeira de presença de ordens de compra em aberto pendentes bool HaveSellLimitOrderEnd; // bandeira pendente Ordens de venda abertas
Só preciso chamar a função, só preciso de uma linha: "Se houver mais pedidos do que um .... e isso é tudo" - e você está me oferecendo uma função completa
Eis como eu guardo meus dados de pedido
É simples, ponha-o na biblioteca.
O tipo de uma ordem a ser contada e seu mestre é dado como entrada, ele retorna o número de ordens abertas ou definidas.
Você pode utilizá-lo da seguinte maneira
if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
Não é complicado colocá-lo na biblioteca.
A entrada é o tipo de ordem a ser contada e seu mestre, ele retorna o número de ordens abertas ou definidas.
Isto pode ser usado da seguinte maneira
if ((FastEma - SmallEma) > Compartor*Point && ChPos(OP_BUY,1111) < OpenPosition)
Eu tenho essa função e não preciso dela, só preciso
apenas uma linha "se houver mais pedidos do que um .... então" e é isso
meus dados para a mesma função que você mostrou estão armazenados aqui
e aqui está o que parece
Acho que consegui.
static int aaa = OrdersHistoryTotal()+ OrdersTotal()
se (sua condição && aaaa < OrderHistoryTotal()+ OrderTotal() )
{
operadores
aaa=OrdensHistóriaTotal()+ OrdensTotal()
}
Se assim for, é ainda melhor colocá-lo em uma função com os mágicos em mente. Você pode nos dizer em que está trabalhando? A lógica é um pouco estranha se eu acertar, quando mais um pedido é aberto, não é mais fácil abrir pedidos não maiores que OpenPosition?
Sua função retorna o número total de ordens abertas e ordens pendentes. Quantas ordens OP_BUY, se houver OP_BUYLIMIT OP_SELLLLIMIT OP_SELLL etc. não aparece.
Já descobri, agora o problema com a função if é que não consigo descobrir qual é o problema.
a questão é que o primeiro valor é executado.
Este não funciona se (HaveBuyLimitOrderEnd== verdadeiro)
{ModifyBuyStopOrder(PRAskS); // Selecione
} }
em palavras, se houver um pedido HaveBuyLimitOrderEnd, modifique-o com uma mudança de preço PRAskS
Não consigo descobrir o que está errado. Tomo o valor HaveBuyLimitOrderEnd de void Myorders() no código acima
o valor if(bt===1&&bl====7) é principal, portanto, se for verdade, use todos os seguintes
o mais provável é terBuyLimitOrderEnd== verdadeiro porque eu defini OrderLots()==3*Lot all work apenas modifica os pedidos com 0,3 lote
Observe o que está destacado em vermelho . O tipo de ordens comerciais é o mesmo e as variáveis no tubo são diferentes, é assim que deve ser.
Sim, deve ser, porque há diferentes funções de abertura e eu não faço um pedido de OrderType () e pedi a bandeira se ela está aberta, mas o problema não está nesta função porque os outros pedidos também não funcionam esta que eu lancei pela primeira vez, E NA MESMA FUNÇÃO ABERTA NORMALMENTE
ENTÃO O PROBLEMA É COM O PEDIDO NO OPERADOR
O problema parece estar em outro lugar. Mas você provavelmente deveria ver o código.
O problema parece estar em outro lugar. Mas eu acho que preciso ver o código.
Definitivamente não está em outro lugar, tudo o resto funciona, mas o problema é que o pedido (HaveBuyLimitOrderEnd=== verdadeiro) está errado, então estou me perguntando como dizer para modificar e excluir,
ou a própria consulta está errada
if(bs===1&&bl====3)
{OpenBuyLimitOrderEnd(Lot*15,PRAskL);
se (HaveBuyLimitOrderEnd== verdadeiro)
{ModifyBuyStopOrder(PRAskS);
} }
Sim, deve ser, porque existem diferentes funções de abertura e eu não faço um pedido de OrderType () e pedi a bandeira se ela está aberta, mas o problema provavelmente não está nesta função porque os outros pedidos também não funcionam esta que eu lancei pela primeira vez, E NA MESMA FUNÇÃO ABERTA NORMALMENTE
ENTÃO O PROBLEMA É COM A CONSULTA NO OPERADOR
Será que em funções marcadas em vermelho HaveBuyLimitOrderEnd está definido no tubo? Caso contrário, você precisa ligar para Myorders() antes de if. Caso contrário, você não sabe o que existe. E, só por precaução, as bandeiras (variáveis)
HaveBuyOrder = falso;
HaveSellOrder = falso;
HaveBuyStopOrder = falso;
HaveSellStopOrder = falso;
HaveBuyLimitOrder = falso;
HaveSellLimitOrder = falso;
HaveBuyLimitOrderEnd = falso;
HaveSellLimitOrderEnd = falso;
deve ser definido a nível global .
Pergunto-me se a bandeira HaveBuyLimitOrderEnd está colocada em vermelho no cano. Caso contrário, você precisa chamar Myorders() antes de if. Caso contrário, você não sabe o que existe. E só por precaução, bandeiras (variáveis)
HaveBuyOrder = falso;
HaveSellOrder = falso;
HaveBuyStopOrder = falso;
HaveSellStopOrder = falso;
HaveBuyLimitOrder = falso;
HaveSellLimitOrder = falso;
HaveBuyLimitOrderEnd = falso;
HaveSellLimitOrderEnd = falso;
deve ser definido globalmente.
está a um nível glabal
bool HaveBuyOrder; // bandeira se houver ordens de compra no mercado aberto
bool HaveSellOrder; // bandeira de ordens de mercado aberto para vender
bool HaveBuyStopOrder; // bandeira de ordens de compra em aberto pendentes
bool HaveSellStopOrder; // bandeira de ordens pendentes de venda
bool HaveBuyLimitOrder; // bandeira de ordens de compra em aberto pendentes
bool HaveSellLimitOrder; // bandeira de ordens pendentes Sell
bool HaveBuyLimitOrderEnd; // bandeira de presença de ordens de compra em aberto pendentes
bool HaveSellLimitOrderEnd; // bandeira pendente Ordens de venda abertas
está na função de abertura da ordem.
bilhete = OrderSend(Curr_symb,OP_BUYSTOP, Lot, PRAskS, Slippage, SL, TP, 0, Magic, 0, CLR_NONE);
se (bilhete > 0) {
HaveBuyStopOrder = verdadeiro;
se (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES)) Imprimir("função para colocar um pedido BuyStop : ", OrderOpenPrice())
}
else Print("Error # ", GetLastError(), " function for placing BuyStop order",MarketInfo(Curr_symb,MODE_ASK));
retorno(bilhete);
}
ENTÃO TUDO O RESTO FUNCIONA