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

 
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á.
 
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.
Razão: