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

 

Estou copiando-o corretamente para a pasta indicadora7

Arquivos anexados:
 
hoz:

Há a seguinte situação:

Mostrei um pedaço de código onde há um mal-entendido. Todas as variáveis são declaradas globais. Na funçãoIsObjectFound() obtenho os valores do primeiro e segundo pontos de preço do objeto, o nome e o valor do preço do objeto na barra atual. Se o objeto for encontrado, ele deve sair da função no modo verdadeiro, caso contrário em modofalso .


A função continua a executar a função de início. O que é isto?

Nunca seja ganancioso com a saída de depuração se algo der errado e tente verificar se há mais erros. Exemplo de um roteiro de trabalho:

//+------------------------------------------------------------------+
//|                                             Test ObjectFound.mq4 |
//|                                         Copyright © 2013, ir0407 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, ir0407"
#property link      ""

#include <stderror.mqh>
#include <stdlib.mqh>

string objName;
int isObj;
double objPrice1, objPrice2, objPriceCurr; 

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound())
   {
      Print("В окне отсуствуют объекты, поиск продолжается...");
      return (0);
   }
  return(0);
}
//+------------------------------------------------------------------+

//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound(int ObjType = EMPTY)
{
   int Error;
   //Eсли объектов на графике нет, то и делать нам тут больше нечего
   if(ObjectsTotal(ObjType) == 0)
   {
      Print("Объекты на графике отсутствуют.");
      return(False);
   }
   for (int obj = 0; obj < ObjectsTotal(ObjType); obj++)
   {
      objName = ObjectName(obj);
      //Нужно убедиться что в переменной objName лежит имя объекта,
      //а не какая нибудь чепуха.
      Error = GetLastError();
      if(Error == ERR_NO_ERROR)
      {
        isObj = ObjectFind(objName);
        if(isObj == -1)
        {
          Print("Объект с именем \"", objName, "\" не найден.");
          Error = GetLastError();
          Print("Функция ObjectFind() вернула код ошибки #", Error);
          return(false);
        }
        objPrice1 = ObjectGet(objName, OBJPROP_PRICE1);
        objPrice2 = ObjectGet(objName, OBJPROP_PRICE2);
        objPriceCurr = ObjectGetValueByShift(objName,0);
        Print("objPrice1 = ", objPrice1);
        Print("objPrice2 = ", objPrice2);
        Print("objPriceCurr = ", objPriceCurr);
      }
      else
      {
        Print("Функция ObjectName() вернула код ошибки #", Error);
        return(false);
      }
   }
   return (True); // Объект найден!
}
 
ir0407:

Nunca seja ganancioso com a saída de depuração se algo funcionar mal e tente verificar se há mais erros. Exemplo de um roteiro de trabalho:



Igor, obrigado pelo valioso comentário. Você está certo! Nunca trabalhei com objetos antes, agora estou pegando o jeito. Estive pensando de que lado me aproximar dele.
 
GaNDarM:


Você entendeu mal. Eu não quero mudar o valor do meu equilíbrio no terminal, embora seria realmente bom:)

Preciso mudar meu tamanho de lote, dependendo do resultado de uma negociação anterior (lucro ou prejuízo). E como prescrever mudança de depósito (perda incorrida ou lucro ganho) não sei.

Você pode controlar o resultado comercial de duas maneiras (talvez haja outras, eu gosto delas):
1) Para lembrar o valor anterior do depósito e compará-lo com o atual (AccountBalance()). Mas este método precisará envolver as variáveis globais do terminal, para que a variável não perca seu valor na reinicialização do EA ou do terminal (ou escreva-o em um arquivo);

2) E você pode verificar o resultado de um comércio anterior a partir da história (procure a função no fio da Kim).

 
koSTRIKin:

Estou copiando-o corretamente para a pasta indicadora7

A pasta correta é a dos especialistas/indicadores. Por via das dúvidas, verifique sua presença na pasta após escrever.

Se estiver lá, ele aparecerá definitivamente após a compilação de qualquer código no editor.

 
      objName = ObjectName(obj);
      //Нужно убедиться что в переменной objName лежит имя объекта,
      //а не какая нибудь чепуха.
      Error = GetLastError();
      if(Error == ERR_NO_ERROR)
Por que haveria um absurdo se a função retorna o nome do objeto concretamente?
 

GaNDarM

(функцию поищите в ветке у Кима). 

Ramo
 
TarasBY:

Há duas maneiras de controlar o resultado comercial (pode haver outras, estas me agradam):
1) Para lembrar o valor anterior do depósito e compará-lo com o atual (AccountBalance()). Mas este método deve envolver variáveis globais do terminal para que a variável não perca seu valor ao reiniciar o EA ou o terminal (ou escrevê-lo em um arquivo);

2) E você pode verificar o resultado de um comércio anterior a partir da história (procure a função no fio da Kim).


Obrigado, vou procurar
 

Por que as variáveis são designadas como zero no INIT()? Qual é o erro ou como atribuir os preços de compra e venda a variáveis fora da função start()? Eu tentei colocar RefreshRates(); na frente deles, mas nenhuma mudança :(

int init()
  {
   .....
   //---
   UpL  =  Ask;     // Пик вверх изначально равен цене покупки
   DownL  =  Bid;     // Пик вниз изначально равен цене продажи
   
   return(0);
  }
//---end init--------------------------------------------------------
 

Saudações!

Explique como programar o valor do número de barras desde o mínimo da semana passada até o início da semana atual.