[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 458

 
mamba5:

Durante os testes EA eu recebo erro 130 - paradas erradas. Na função NewOrder as variáveis externas TakeProfit e StopLoss devem ser passadas, e me parece que fiz de tudo para conseguir isso, mas como a impressão mostra, os zeros são passados. Entendo a razão deste erro aqui, mas ainda não fui capaz de encontrá-lo. Por favor, me ajude.

extern int TakeProfit=100;
extern int StopLoss=100;

....................................

NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);

int NewOrder(int Cmd,double Lot,int TakeProfit,int StopLoss)

O problema aqui é que existem variáveis globais StopLoss e elas são passadas para o procedimento como parâmetros. É melhor dar-lhes um novo nome no procedimento.

 
fore-x:

Как в mql4 из одного индикатора управлять более чем 8 буферами обмена, существует ли способ обхода данного ограничения?

Ну, как пример, мне нужно построить более 8 индикаторных линий, но из одной программы.

Zhunko:

Linhas de tendência.

E mais detalhes? Ao menos me dê um link para onde ler?
 
splxgf:

O problema aqui é que existem variáveis StopLoss globais e elas também são passadas para o procedimento como parâmetros. É melhor dar-lhes um novo nome no procedimento.


Você está certo. É realmente mais lógico. Corrigido:

//+----------Функция открытия ордера-----------------------------------+
int NewOrder(int Cmd,double Lot,int TaPr,int StLo)
{
 double TP=0;// тейкпрофит
 double SL=0;// стоплос
 double PR=0;// цена
 while(!IsTradeAllowed())Sleep(100);
 if(TaPr<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    TaPr=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(StLo<MarketInfo(Symbol(),MODE_STOPLEVEL))  
    StLo=MarketInfo(Symbol(),MODE_STOPLEVEL);
 if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 Print("TaPr=",TaPr," StLo=",StLo," StopLevel=",MarketInfo(Symbol(),MODE_STOPLEVEL));
 tic=OrderSend(Symbol(),Cmd,Lot,PR,3,SL,TP,"",0,0,CLR_NONE);
 if(tic<0)Print("ошибка открытия ордера:",GetLastError()); Print("Cmd-",Cmd," Lot=",Lot," PR=",PR," SL=",SL," TP=",TP);
return(tic);
}
Mas isso não ajudou muito. TaPr e StLo= 100, mas PR, SL e TP são zero por alguma razão.....
Arquivos anexados:
 

Olá, você pode me ajudar a escrever uma condição para que o pedido abra apenas uma vez, neste ponto ele abre a cada carrapato

   topOrder=OrderSend(Symbol(),OP_BUYSTOP,1,Hinput,3,Price_high-(height_box/100*sl),Price_high+(height_box/100*tp),"my order #",16384,0,Green);
                     if (topOrder<0)
                        {
                           Print("Верхний ордер ошибка #", GetLastError());
                           return(0);
                        }

Só preciso fazer algo para que fique assim: se eu já tenho um pedido já feito, ele não abrirá outro sem um OrderComment, ainda não tenho idéia do que fazer com ele

Obrigado de antemão

 
fore-x:
Que tal mais detalhes? Ao menos me dê um link para onde ler?
Que ligação? Você conecta as barras com as linhas de tendência. Então você será independente dos amortecedores com suas falhas.
 
artmedia70:
A menos que você mesmo a coloque na tabela, ela não será refletida durante a EA. Como você fez isso?
Quando o testador termina, as informações das linhas indicadoras aparecem.
 
mamba5:


Você está certo. Faz mais sentido dessa forma. Corrigido:

Mas isso não ajudou muito. TaPr e StLo= 100, mas PR, SL e TP são zero por alguma razão.....


  NewOrder(OP_BUYSTOP, Lot, TakeProfit, StopLoss);
  NewOrder(OP_SELLSTOP, Lot, TakeProfit, StopLoss);
if(Cmd==OP_BUY)
   {
    PR=NormalizeDouble(Ask, Digits);
    if(TaPr>0)TP=NormalizeDouble(Ask,Digits)+NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)SL=NormalizeDouble(Bid,Digits)-NormalizeDouble(StLo*Point,Digits);
   }
 if(Cmd==OP_SELL)
   {
    PR=NormalizeDouble(Bid, Digits);
    if(TaPr>0)TP=NormalizeDouble(Bid,Digits)-NormalizeDouble(TaPr*Point,Digits);
    if(StLo>0)  SL=NormalizeDouble(Ask,Digits)+NormalizeDouble(StLo*Point,Digits);
   }
 

por favor, aconselhe como calcular os negócios que geram perdas.

ou seja, negócios que foram fechados por um stop loss.

e reiniciar o balcão após um comércio lucrativo.

Isto é, após fechar o Take Profit para repor o contador a zero.

Dígito contador inicial = 1

int Schetcik = 1;

Todas as transações, tanto de compra como de venda, devem ser contadas.

 
Vinin:



Obrigado! ))) Não conseguia ver o erro até que fosse comparado tão claramente
 
belck:

por favor, aconselhe como calcular os negócios que geram perdas.

ou seja, negócios que foram fechados por um stop loss.

e reiniciar o balcão após um comércio lucrativo.

Isto é, após fechar o Take Profit para repor o contador a zero.

Dígito contador inicial = 1

Todas as transações, tanto de compra como de venda, devem ser contadas.


O fechamento de uma parada de perda não significa que o comércio está perdendo, e vice versa. A menos, é claro, que as paradas e tomadas tenham sido marcadas na abertura e não tenham sido tocadas novamente.
Razão: