[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 508

 
artmedia70:

int iHighest( string symbol, int timeframe, int type, int count=WHOLE_ARRAY, int start=0)

Retorna o índice do valor mais alto encontrado (offset em relação à barra atual).
Parâmetros:
símbolo - Nome do símbolo, cujos dados serão pesquisados. NULL significa símbolo atual.
cronograma - Período. Pode ser um dos períodos do gráfico. 0 indica o período do gráfico atual.
tipo - O identificador das séries temporais. Pode ser qualquer um dos identificadores da série cronológica.
contar - Número de elementos das séries temporais (na direção da barra atual para o índice ascendente), entre os quais a busca deve ser realizada.
início - O índice (offset a partir da barra atual) da barra inicial a partir da qual se iniciará a busca do valor mais alto. Os valores negativos são ignorados e substituídos por um valor zero.
Exemplo:


Muito obrigado. Acho que não haverá mais perguntas.
 
ask:

O que pode não ser claro para uma pessoa - eu não sei. Também não sei o que causou a agressão e a grosseria (eles poderiam simplesmente ignorá-la), se outros teriam respondido ou se ele mesmo teria se recuperado - é tudo a mesma coisa para você?

Você não deve pensar em Alexei dessa maneira. Ele é uma das pessoas mais benevolentes aqui. Ele não quis ofendê-lo. Todos são enviados a um telepata se não entenderem o problema. É uma piada local com sentido.
 
Reshetov:

Aqui estão eles (há muito mais erros em seu código, mas estes nem sequer passam pelo compilador): Além disso, mesmo que você mude o código para algo mais são do ponto de vista do compilador

ainda estará teoricamente errado sem antes normalizar os valores reais antes da comparação. Além disso, a normalização pode falhar se o preço mudar em mais de uma tubulação de uma só vez e sua condição não for atingida.

A maneira correta de pesquisar a condição de travessia é


P.S. É bastante fácil encontrar o lugar com o erro após a compilação no MetaTrader:

1. Na aba "Toolbox", na coluna "File", especifique o número da linha e o número do símbolo, no qual o compilador detectou um erro, separado por vírgulas.

2. Se você clicar duas vezes na mensagem de erro no campo "Descrição" da mesma aba, o cursor do editor saltará para o local onde o compilador detectou este mesmo erro.


Obrigado pelas dicas.

[Deleted]  
Boa tarde! Respeito a todos os membros do fórum! Se você puder, por favor, avise - quando você desliga os dados da plataforma da revista é necessariamente apagado, certo? E como você escreve impressões ou quaisquer outros dados de saída do Expert Advisor, para que quando você desliga o computador, eles sejam salvos em um bloco de notas, ou em outro lugar? Não é muito complicado e é possível?
 
dkfl.zrjdktdbx:
Boa tarde! Respeito a todos os membros do fórum! Se você puder, por favor, avise - quando você desliga os dados da plataforma da revista é necessariamente apagado, certo? E como você escreve impressões ou quaisquer outros dados de saída do Expert Advisor, para que quando você desliga o computador, eles sejam salvos em um bloco de notas, ou em outro lugar? Não é muito complicado e é possível?
Bem, se você olhar os logs na pasta do programa, você encontrará muitas coisas interessantes lá.
[Deleted]  
Obrigado!
 
Você pode me dizer como calcular uma possível perda na moeda do depósito, tendo um preço de abertura e um preço de parada de perda?
 
sss2019:
Diga-me como calcular uma possível perda na moeda do depósito com o preço de abertura do pedido e o preço de stop loss.
//--------------------------------------------------------------------
// Функция модификации StopLoss всех ордеров указанного типа
// Глобальные переменные:
// Mas_Ord_New             Массив ордеров последний известный
// int TralingStop         Значение TralingStop(количество пунктов)
//--------------------------------------------------------------------
void SampleTrailing_texbook ( int Tip, double V_StopLossPips, double V_TakeProfitPips)
  {
   int Ticket;                      // Номер ордера
   double
   Price,                           // Цена открытия рыночного ордера
   TS,                              // TralingStop (относит.знач.цены)
   SL,                              // Значение StopLoss ордера
   TP;                              // Значение TakeProfit ордера
   double difference; //разность в пунктах    
   double Profit;
   
   bool Modify;                     // Признак необходимости модифи.
//----------------------------------------------------------------------
      PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));      
      Print("PointValue = ",PointValue, " Point  = ", DoubleToStr(Point, Digits) );
      Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL ); // мин уровень трала
      Modify=false;                       // Пока не назначен к модифи
      
      Price = OrderOpenPrice();           // Цена открытия ордера
      SL    = V_StopLossPips;             // Значение StopLoss ордера
      TP    = V_TakeProfitPips;           // Значение TakeProft ордера
      Ticket= OrderTicket();              // Номер ордера
      
      if (TralingStop<Level_new)          // Если меньше допустимого..
         TralingStop=Level_new;           // .. то допустимый
         TS=TralingStop*Point;            // То же в относит.знач.цены
      //-----------------------------------------------------------------
      switch(Tip)                         // Переход на тип ордера
        {
         case 0 :                         // Ордер Buy
            difference = NormalizeDouble (Bid-TS - OrderOpenPrice(), Digits)/Point;               
            Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)
            if (trlinloss==false){         // тралим только профит
               if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз 
                 if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && NormalizeDouble(Price,Digits)< NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            } 
             else {                         // тралим с зоны лоссов
               if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))
              {                           // ..то модифицируем его:
               SL=Bid-TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
             } 
            break;                        // Выход из switch
         
         
         case 1 :                          // Ордер Sell
             difference = NormalizeDouble (OrderOpenPrice()-(Ask+TS),Digits)/Point;
             Profit = Lots_New * difference*PointValue; // Профит по УРОВНЮ ТРАЛА рыночного ордера на данном объеме (не путать c OrderProfit)             
             if (trlinloss==false) {          // тралим с уровня профита по ордеру
                if (Profit>MathAbs (Sum_Loss)) // если профит по уровню трала больше суммарного убытка предыдущих поз            
                   if ((NormalizeDouble(SL,Digits)>  // Если выше желаемого..
                        NormalizeDouble(Ask+TS,Digits)||
                        NormalizeDouble(SL,Digits)==0) && NormalizeDouble(Price,Digits)>NormalizeDouble(Ask+TS,Digits)) //.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }            
            else {                        // тралим с зоны лоссов
          
            if (NormalizeDouble(SL,Digits)>// Если выше желаемого..
               NormalizeDouble(Ask+TS,Digits)||
               NormalizeDouble(SL,Digits)==0)//.. или нулевой(!)
              {                           // ..то модифицируем его
               SL=Ask+TS;                 // Новый его StopLoss
               Modify=true;               // Назначен к модифи.
              }
            }  
        }                                 // Конец switch
      if (Modify==false)                  // Если его не надо модифи..
         return;                        // ..то идём по циклу дальше
      bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифицируем его!
      //----------------------------------------------------------------------
      if (Ans==false)                     // Не получилось :( 
        {                                 // Поинтересуемся ошибками:
            Print("Не удалось модифицировать ордер №",OrderTicket(),". Ошибка: ",GetLastError());
            return;                       // .. то уходим.
        }
}                                         // Выход из пользов. функции


O fi- fion deste comerciante do livro didático foi retrabalhado por mim para minhas próprias necessidades. Aqui, o cálculo do lucro sobre um determinado volume de lotes, no nível da rede de arrasto e o valor do lucro acima da perda total das posições de perda anteriores fechadas consecutivas - a rede de arrasto está habilitada - você terá tudo semelhante, apenas para aplicar não um lucro, como aqui, mas uma perda - como você precisa.

Preste atenção ao cálculo das variáveis de Compra e Venda:

double difference; //разность в пунктах    
double Profit; 
PointValue=MarketInfo(Symbol(),MODE_TICKVALUE)*(MarketInfo(Symbol(),MODE_POINT)/MarketInfo(Symbol(),MODE_TICKSIZE));
Faça tudo da mesma maneira e pronto.
 
Então eu ainda não entendo como descobrir o valor do ponto na moeda do depósito?
 
sss2019:
Então eu ainda não entendo como descobrir o valor do ponto na moeda do depósito?

veja este cálculo - faça ANÁLOGO. Tudo.