[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 344

 
Summus_Digitus:
Olá a todos. Este é um assunto sério e urgente e já procurei em toda a Internet, como dizem... Decidi usar o MT4 por um longo tempo, já o uso há 3 dias. Tentei usá-la por um tempo e me pareceu que era a primeira vez e não entendia o que estava acontecendo. Pensei, não é nada sério, mas de repente vou ao MT e vejo 4 gráficos H4 com um novo sistema e vejo o preço errado, comparo-o com o StartFX 2, abro o cronograma H1 e D1 e espero... Estou esperando há uma hora e ela será atualizada ano a ano, mas não fará isso. "Bem, reinstale-o e pronto" - você diz, e eu lhe digo "Que se lixe". "Então baixe um indicador de alguma atualização de software de quem sabe qual site" - você pergunta e eu lhe digo "Que se lixe duas vezes". Eu realmente quero continuar ganhando dinheiro e estrangular a ajuda do computador com 1 e depois veremos :-)

Sóbrio! Sinceramente - eu li e uma lágrima de picada rolou pelo meu rosto tremendo de riso.
 
VladTch:

Bom dia a todos!

Minha pergunta parece ser simples, mas eu escavei todos os artigos, mas não consegui encontrar uma resposta - como funciona o operador de retorno(-1)? Para onde ele passa o controle? Neste código, por exemplo:

senão return(0);

Com zero entre parênteses e sem parênteses tudo parece claro. Mas e quanto a (-1)?

Obrigado pela sua resposta. :)

Asfunções especiais são funções gerais. Eles podem ser chamados como funções definidas pelo usuário. Mas há uma peculiaridade. Durante a chamada ao sistema, os parâmetros e o valor de retorno não são passados.

 
Summus_Digitus:
Olá a todos. Este é um assunto sério e urgente e já procurei em toda a Internet, como dizem... Decidi usar o MT4 por um longo tempo, já o uso há 3 dias. Tentei usá-lo por um tempo e me pareceu que era a primeira vez e me confundi com as configurações e o navegador esqueceu os sites que visitei. Pensei, não é nada sério, mas de repente vou ao MT e vejo 4 gráficos H4 com um novo sistema e vejo o preço errado, comparo-o com o StartFX 2, abro o cronograma H1 e D1 e espero... Estou esperando há uma hora e ela será atualizada ano a ano, mas não fará isso. "Bem, reinstale-o e pronto" - você diz, e eu lhe digo "Que se lixe". "Então baixe um indicador de alguma atualização de software de quem sabe qual site" - você pergunta e eu lhe digo "Que se lixe duas vezes". Eu realmente quero continuar ganhando dinheiro e estrangular a ajuda do computador com 1 e depois veremos :-)

Aos Anais!!!
 

Por que eu não posso pintar um número?

 #property indicator_chart_window
void start()
   {
string spred=DoubleToStr(MarketInfo(Symbol(), MODE_SPREAD), 0);
   string lot=AccountFreeMargin()/(Bid)*0.002;
   string lots=StringSubstr(lot, 4, 1);
 
SetLabel("ЧИСЛО",   lots , ColorOnSign(lots), 5, 7, 1);}
  
   color ColorOnSign(double nu){
      color lcColor=Navy;
         if (nu<4) lcColor=Green;
         if (nu>6) lcColor=Red;
      return(lcColor);}
     
   void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
      if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
         ObjectSetText(nm, tx, fs);
         ObjectSet(nm, OBJPROP_COLOR    , cl);
         ObjectSet(nm, OBJPROP_XDISTANCE, xd);
         ObjectSet(nm, OBJPROP_YDISTANCE, yd);
         ObjectSet(nm, OBJPROP_CORNER   , cr);
         ObjectSet(nm, OBJPROP_FONTSIZE , 18);
      return(0);}

Por que eu não posso pintar um número?

 

Estranho. Pensei que houvesse uma pergunta.

Está compilando!

 
Elektronik:

Por que eu não posso pintar um número?

 #property indicator_chart_window
void start()
   {
string spred=DoubleToStr(MarketInfo(Symbol(), MODE_SPREAD), 0);
   string lot=AccountFreeMargin()/(Bid)*0.002;
   string lots=StringSubstr(lot, 4, 1);
 
SetLabel("ЧИСЛО",   lots , ColorOnSign(lots), 5, 7, 1);}
  
   color ColorOnSign(double nu){
      color lcColor=Navy;
         if (nu<4) lcColor=Green;
         if (nu>6) lcColor=Red;
      return(lcColor);}
     
   void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) {
      if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
         ObjectSetText(nm, tx, fs);
         ObjectSet(nm, OBJPROP_COLOR    , cl);
         ObjectSet(nm, OBJPROP_XDISTANCE, xd);
         ObjectSet(nm, OBJPROP_YDISTANCE, yd);
         ObjectSet(nm, OBJPROP_CORNER   , cr);
         ObjectSet(nm, OBJPROP_FONTSIZE , 18);
      return(0);}

Por que eu não posso pintar um número?

Você o pintou, mas para mudar a cor você tem que criar outro objeto com a mesma cor! E mudar os objetos, então a cor vai mudar visualmente! É isso que eu entendo! Ou talvez haja uma opinião diferente? Eu mesmo só mudei de cor com Mashka desta maneira.
 

Acho que tudo tem a ver com o número.

lots=StringSubstr(lot, 4, 1); 

talvez o software o entenda como um único dígito.

 
Elektronik:

Isso é estranho. Eu pensei que havia uma pergunta.

Está compilando!

Sim, eu queria acrescentar e acidentalmente excluí-lo. Não queria restaurá-la.

Você tem que mudar a cor com isto:

ObjectSet(nm, OBJPROP_COLOR, cl);

Seu código não mostra onde você muda a cor.

============

Eu descobri onde...

É assim que você faz:

   void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9)
    {
     ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
     ObjectSetText(nm, tx, fs);
     ObjectSet(nm, OBJPROP_COLOR    , cl);
     ObjectSet(nm, OBJPROP_XDISTANCE, xd);
     ObjectSet(nm, OBJPROP_YDISTANCE, yd);
     ObjectSet(nm, OBJPROP_CORNER   , cr);
     ObjectSet(nm, OBJPROP_FONTSIZE , 18);
    }

Não tenha medo de recriar o objeto. Está otimizado. Se um objeto é criado, ele apenas muda as propriedades que mudam. Não será recriado.

Por favor, coloque colchetes em um nível, caso contrário você não entenderá o que está escrito onde os blocos começam e terminam.

Deve haver problemas com o parâmetro ColorOnSign(). O parâmetro é duplo e você insere um fio.

SetLabel("ЧИСЛО", lots, ColorOnSign(StrToDouble(lots)), 5, 7, 1);

Ou

color ColorOnSign(string sLots)
 {
  double nu = StrToDouble(sLots);
  color lcColor=Navy;
  if (nu<4) lcColor=Green;
  if (nu>6) lcColor=Red;
  return(lcColor);
 }
 

Boa tarde, me ajude e se você puder me dar uma dica sobre o código.

Tenho a seguinte rede de arrasto em coruja ->

        for ( int v = OrdersTotal() - 1; v >= 0; v -- ){       
                if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)){           
                        if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){ 
                                //+=================================================================================+
                                ///+================================Обычный трал ====================================+
                                if (TralSimple){
                                        if(OrderType() == OP_SELL){
                                                if((OrderOpenPrice()-Ask) > (Point*TrailingStop)){ 
                                                        if((OrderStopLoss() > (Ask+Point*TrailingStop)) || (OrderStopLoss()==0)){
                                                                OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                                                        }
                                                }
                                        }
                                        //+=================================================================================+
                                        if(OrderType() == OP_BUY){
                                                if((Bid-OrderOpenPrice()) > (Point*TrailingStop)){
                                                        if(OrderStopLoss() < Bid-Point*TrailingStop || (OrderStopLoss()==0)){
                                                                OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);  
                                                        }
                                                }
                                        }
                                }                                  
--------------------------------------------

Agora, a rede de arrasto se move uma parada após cada sinal positivo. Eu quero fazer o seguinte:

o primeiro passe - com um sinal positivo, a rede de arrasto deslocará a parada em 1 ponto e aumentará o passo para cima.

Segundo passe - vamos tomar uma variável x que será incrementada em 1 cada vez que fizermos um determinado passo (5). E com cada passo (passo)*x

etc.

A questão é como aparafusar nesta etapa com um multiplicador crescente. Em caso de várias posições, este multiplicador deve ser diferente para cada posição

 
berezhnuy:

Boa tarde, me ajude e se você puder me dar uma dica sobre o código.

Tenho a seguinte rede de arrasto em coruja ->

Agora, a rede de arrasto se move uma parada após cada sinal positivo. Eu quero fazer o seguinte:

primeiro passe - com um sinal positivo a rede de arrasto moverá a parada por 1 ponto, e por quanto o par subiu.

Segundo passe - tomar uma variável x que será aumentada em 1 a cada passe.

etc.

A questão é como acrescentar um passo com multiplicador crescente. E no caso de várias posições, este multiplicador deve ser diferente para cada posição


Você faz algo como parabólico, o cálculo é relativo ao ponto base - preço e tempo de abertura
Razão: