[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 231

 

Lo sto copiando correttamente nella cartella degli indicatori7

 
hoz:

C'è la seguente situazione:

Ho mostrato un pezzo di codice dove c'è un malinteso. Tutte le variabili sono dichiarate globali. Nella funzioneIsObjectFound() ottengo i valori del primo e del secondo punto di prezzo dell'oggetto, il nome e il valore del prezzo dell'oggetto sulla barra corrente. Se l'oggetto viene trovato dovrebbe uscire dalla funzione in modalità true, altrimenti infalse .


La funzione continua ad eseguire la funzione di avvio. Che cos'è questo?

Non siate avidi con l'output di debug se qualcosa va storto e cercate di controllare altri errori. Esempio di uno script funzionante:

//+------------------------------------------------------------------+
//|                                             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:

Non siate mai avidi con l'output di debug se qualcosa funziona male e cercate di controllare altri errori. Esempio di uno script funzionante:



Igor, grazie per il prezioso commento. Hai ragione! Non ho mai lavorato con gli oggetti prima, ora ci sto prendendo la mano. Ho pensato da che parte avvicinarmi.
 
GaNDarM:


Avete frainteso. Non voglio cambiare il valore del mio saldo sul terminale, anche se sarebbe davvero bello:)

Ho bisogno di cambiare la dimensione del mio lotto a seconda del risultato di un trade precedente (profitto o perdita). E come prescrivere il cambio di deposito (in perdita o in guadagno) non lo so.

Il risultato del trade può essere controllato in 2 modi (forse ce ne sono altri, a me piacciono):
1) Ricordare il valore precedente del deposito e confrontarlo con quello attuale (AccountBalance()). Ma questo metodo dovrà coinvolgere le variabili globali del terminale perché la variabile non perda il suo valore al riavvio dell'EA o del terminale (o scriverlo in un file);

2) E puoi controllare il risultato di un trade precedente dalla storia (cerca la funzione nel thread di Kim).

 
koSTRIKin:

Lo sto copiando correttamente nella cartella degli indicatori7

La cartella corretta è esperti/indicatori. Per sicurezza, controllate la sua presenza nella cartella dopo la scrittura.

Se c'è, apparirà sicuramente dopo la compilazione di qualsiasi codice nell'editor.

 
      objName = ObjectName(obj);
      //Нужно убедиться что в переменной objName лежит имя объекта,
      //а не какая нибудь чепуха.
      Error = GetLastError();
      if(Error == ERR_NO_ERROR)
Perché non avrebbe senso se la funzione restituisce concretamente il nome dell'oggetto?
 

GaNDarM

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

Ramo
 
TarasBY:

Ci sono 2 modi per controllare il risultato del commercio (ce ne possono essere altri, questi mi piacciono):
1) Ricordare il valore precedente del deposito e confrontarlo con quello attuale (AccountBalance()). Ma questo metodo deve coinvolgere le variabili globali del terminale affinché la variabile non perda il suo valore al riavvio dell'EA o del terminale (o scriverlo in un file);

2) E puoi controllare il risultato di un trade precedente dalla storia (cerca la funzione nel thread di Kim).


Grazie, cercherò
 

Perché le variabili sono assegnate a zero in INIT()? Qual è l'errore o come assegnare i prezzi di acquisto e di vendita alle variabili al di fuori della funzione start()? Ho provato a mettere RefreshRates(); davanti a loro, ma nessun cambiamento :(

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

Saluti!

Spiega come ottenere programmaticamente il valore del numero di barre dal minimo della settimana scorsa all'inizio della settimana corrente.