[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 323

 
Dentro da seleção, após os filtros para símbolo e magik (se houver), ou seja, verificamos a ordem de fechamento, se não for igual a zero (a ordem está fechada), proibimos seu religamento
 
FAQ:
Dentro da seleção, depois de filtros para símbolo e magik (se houver), ou seja, verificamos o tempo de fechamento do pedido, se não for igual a zero (o pedido está fechado), então proibimos fechá-lo novamente


Obrigado! Vou tentar o acima então!

Aqui, tentou inserir, executou na demonstração, mas algo saiu mais errado e diferente. Peço primeiro, do fogão, sobre este código da Doka:

  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     int      ticket=OrderTicket();
     if(ctm>0) Print("Время открытия ордера № ",ticket," ",ctm);
     ctm=OrderCloseTime();
     if(ctm>0) Print("Время закрытия ордера № ",ticket," ",ctm);
    }
  else
    Print("OrderSelect() вернул ошибку ",GetLastError());

O que aqui é supérfluo, para inserir entre Selecta Trades, checagem de símbolos, magik... и ... tipo de pedido. Talvez com data, cmt e int ticket para introduzir no início? E a gráfica escreve outros erros.

E acrescente uma condição de fechamento:

if(ctm == 0) {CloseOrder(OrderTicket(),OrderLots(),Bid,slip,Yellow);return(0);} else continue;

Ajude, por favor!

 

Olá, você poderia me dar uma dica?

Quero abrir uma ordem não imediatamente com stp e sl, mas definir stp e sl após a abertura da ordem, modificando-a

Eu o fiz:

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
retorno(0);

}


Eu não sei o que diabos estou fazendo.

certo?

 
RMX13:

Olá, você poderia me dar uma dica?

Quero abrir uma ordem não imediatamente com stp e sl, mas definir stp e sl após a abertura da ordem, modificando-a

Eu o fiz:

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
retorno(0);

}


Eu não sei o que diabos estou fazendo.

certo?



E eu não entendo e muito mais! Use o SRC para esboçar o código, veja acima?
 
int orderOpen(int cmd, double open, int stopLossPips, int takeProfitPips, int magicNumber){       
      double sl=0, tp=0;
      if(stopLossPips>0){
         stopLossPips = MathMax(stopLossPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      if(takeProfitPips>0){
         takeProfitPips = MathMax(takeProfitPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      int ticket=-1;
      if(_doTrade){        
         double lots  = OrderLotSize();
         if(lots>=MarketInfo(Symbol(), MODE_MINLOT)){          
            //wait context
            if(TradeIsBusy() < 0) {
                 return(-1); 
            }
            if(cmd==OP_BUYSTOP || cmd==OP_BUY || cmd==OP_SELLLIMIT){
               RefreshRates();
               if(cmd==OP_BUY){
                  open=Ask;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open-stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open+takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);              
            }else{
               RefreshRates();
               if(cmd==OP_SELL){
                  open=Bid;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open+stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open-takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            }
Para começar, esta peça é responsável pela abertura de um pedido?
 
Descobri tudo isso sozinho.
 
borilunad:


Obrigado! Então vou tentar o acima!

Aqui, tentou inserir, executou em demonstração, mas algo saiu mais errado e diferente. Estou perguntando primeiro, do fogão, sobre este código da Doki:

O que aqui é supérfluo para inserir entre Selecta Trades, checagem de símbolos, magik... и ... tipo de pedido. Talvez com data, cmt e int ticket para introduzir no início? E a gráfica escreve outros erros.

E acrescente uma condição de fechamento:

Por favor, ajude!


Eh, como diz o ditado: "aprenda o estudante" (c)

for(int i=OrdersTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES){
      if(OrderSymbol()!=Symbol()){continue;}// фильтр по символу(если не наш символ, то пропускаем)
      if(OrderMagicNumber()!=magik){continue;}// фильтр по магику
      if(OrderCloseTime()!=0){continue;}// фильтр по времени закрытия (если не=0 то ордер уже закрыт)
      if(OrderType()<=OP_SELL){//закрытие для рыночных ордеров
         OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD),CLR_NONE);
      }else{// закрытие для отложенных ордеров
         OrderDelete(OrderTicket());
      }
   }
}

Excluir (comentar) o que não é necessário.

 
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0);

Um pedaço de código que abre um pedido e estabelece uma parada para perdas e lucros

terminal gera os seguintes erros: EURUSD,M30: OrderSend error 130

EURUSD,M30: bilhete inválido para a função OrderModify

EURUSD,M30: OrderModify error 4051

EURUSD,M30: OrderSend failed with error #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

Qual é o problema?


 
FAQ:


Eh, como diz o ditado: "Estude, estudante" (c).

Excluir desnecessário (comentar)


Muito obrigado! Eu também sou um aprendiz para toda a vida! E em geral, aprender é mais interessante do que trabalhar. Vou tentar ajustá-lo agora, não quero mudar a ordem no código. A qualquer momento eu mudo ou adiciono condições dependendo das mudanças no comportamento do mercado. Tudo de bom para você e boa noite!
 
RMX13:

Um pedaço de código que abre um pedido e estabelece uma parada para perdas e lucros

terminal gera os seguintes erros: EURUSD,M30: OrderSend error 130

EURUSD,M30: bilhete inválido para a função OrderModify

EURUSD,M30: OrderModify error 4051

EURUSD,M30: OrderSend failed with error #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

Qual é o problema que você pode dizer?

RMX13, todos têm o mesmo problema. Para evitar o erro 130, é necessário normalizar todos os cálculos com preços, lotes e condições, especialmente perto dos preços levando em conta spread, stoplevel e freezevel, e slippage, que devem ser aumentados dependendo da volatilidade. Apenas asc não precisa ser normalizado, mas se você acrescentar algo a ele, ele precisa estar com Dígitos, e lotes com 2 (centavos), etc. em todo o código, e, claro, manipulação de erros em todas as funções comerciais, de modo a não incomodar o CD por nada. Boa sorte!

Veja em Doc: OrderSend(Tudo deve corresponder ao conteúdo da ordem definida)! É por isso que existem erros(:((