[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 223

 
Vinin:


Il manque probablement des parenthèses à un endroit.

Problème résolu. Merci beaucoup.
 
TarasBY:
La variable int Ticket est locale et sera réinitialisée au prochain tick.
La remarque est prise en compte. Merci beaucoup.
 

J'ai rencontré ce problème.

Je dois initialiser un tableau unidimensionnel de type double avec 3000 valeurs de prix d'offre, toutes les valeurs sont différentes et ne sont pas dans l'ordre.

Je dois saisir manuellement chaque valeur séparée par une virgule - ce qui n'est pas réaliste.

J'ai essayé avec excel, mais si je mets un point au lieu d'un point flottant, excel ne lit pas les chiffres pour mettre une virgule entre eux.

Veuillez suggérer la meilleure option.


 

J'ai écrit un simple Expert Advisor qui retourne 3 variables et les passe à start().

Ensuite, à chaque tick, ces données (type d'objet, prix1 et prix2) doivent être renvoyées.

//+-------------------------------------------------------------------------------------+
//|                                                TradingByLine.mq4                    |
//|                                                              hoz                    |
//|                                                                                     |
//+-------------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

string objName;
int isObj,
    objType;
double price1,
       price2;

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{

   

  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return(0);
}
//+-------------------------------------------------------------------------------------+
//| Блок поиска своих объектов                                                          |
//+-------------------------------------------------------------------------------------+
bool IsObjectFound(double& price1, double& price2, int& objType)
{
   for (int obj=0; obj<=ObjectsTotal()-1; obj++)
   {
      objName = ObjectName(obj);
      isObj = ObjectFind(objName);
      price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

      if (isObj != -1)
         return(true);
   }
   return(false);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   if (!IsObjectFound(price1, price2, objType))
      return(0);
   Print("objType = ", objType);
   Print("price1 = ", price1, ", price2 = ", price2);

  return(0);
}

Ensuite, je lance ce conseiller expert en mode visualisation dans le testeur et je trace une ligne dans le graphique à la main. Les prix du dessin et le type d'objet que j'ai obtenu dans la fonctionIsObjectFound() ne renvoient pas des résultats corrects. Voici la sortie du journal :

2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:46     2013.01.24 00:02  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0
2013.03.16 20:12:45     2013.01.24 00:01  TradingByLine EURJPY,M1: objType = -1
2013.03.16 20:12:44     2013.01.24 00:01  TradingByLine EURJPY,M1: price1 = 0, price2 = 0

La ligne est dessinée à la main, ce qui signifie qu'elle a un type et d'autres paramètres :

La ligne

Pourquoi les paramètres requis ne sont pas renvoyés ?

 
solnce600:

J'ai rencontré ce problème.

Je dois initialiser un tableau unidimensionnel de type double pour 3000 valeurs de prix d'offre, toutes les valeurs sont différentes et ne sont pas dans l'ordre.

Il n'est pas réaliste d'entrer manuellement chaque valeur séparée par une virgule.

J'ai essayé avec Excel mais si je mets un point au lieu d'un point flottant, Excel ne lit pas les chiffres pour mettre une virgule entre eux.

Veuillez suggérer la meilleure option.


Excel peut lire, montrez-moi plus de détails sur la façon dont vous avez procédé.
 
hoz:

J'ai écrit un simple Expert Advisor qui retourne 3 variables et les passe à start().

Ensuite, à chaque tick, ces données (type d'objet, prix1 et prix2) doivent être renvoyées.

Ensuite, je lance ce conseiller expert en mode visualisation dans le testeur et je trace une ligne dans le graphique à la main. Les prix du dessin et le type d'objet que j'ai obtenu dans la fonctionIsObjectFound() ne renvoient pas des résultats corrects. Voici la sortie du journal :

La ligne est dessinée à la main, ce qui signifie qu'elle a un type et d'autres paramètres :

Pourquoi les paramètres requis ne sont-ils pas renvoyés ?

Nous devons

price1 = ObjectGet("objName", OBJPROP_PRICE1);
      price2 = ObjectGet("objName", OBJPROP_PRICE2);
      objType = ObjectType("objName");

objName sans guillemets. Il s'agit du nom de la variable (identifiant dans le texte du programme) qui contient le nom de l'objet (chaîne de caractères).

 
alsu:

Il devrait être

objName sans guillemets. Il s'agit du nom de la variable (identifiant dans le texte du programme) qui contient le nom de l'objet (chaîne de caractères).



D'ailleurs, la documentation pense le contraire. C'est là que j'ai été pris dans la confusion.

erreur de documentation

 
alsu:

Excel peut le lire, montrez-moi plus de détails sur la façon de le faire.

Dans la ligne des 100 valeurs avec une virgule après le premier signe (ex : prix)

Mise en évidence d'une ligne

Accueil - trouver et remplacer

Changer toutes les virgules en points - réussi.

Maintenant nous devons mettre des virgules entre les valeurs

Je sélectionne le format des cellules

Tous les formats

Dans le champ actif qui affiche le format numérique de ma chaîne - je mets une virgule à la fin

Exel dit qu'il est incapable de traiter le format que j'ai entré.

 
hoz:


D'ailleurs, la documentation pense le contraire. J'ai donc été induit en erreur.

Les guillemets représentent la VALEUR de la variable chaîne de caractères, et non la variable elle-même !!!!.
 

Pourquoi les commandes ne s'ouvrent-elles pas ?

Dites-moi pourquoi ce code ne fonctionne pas.

J'ai spécifiquement choisi une période du graphique en 2000 (quand le cinquième signe était 0 partout) dans laquelle il y a une bougie ouverte à un prix qui se trouve parmi les valeurs du tableau.

Selon mon idée - à leur ouverture devrait déclencher un ordre - mais cela ne se produit pas ......P O M U ? ???


int start()



{

 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);
 
 double massiv [4]={0.85370,0.85690,    0.85970 ,0.86170};//объявление и инициализация массива


 double value =  Bid ;// параметру value функции ArrayBsearch присваивается значение текущей цены
 int S = ArrayBsearch(  massiv[4],  value, WHOLE_ARRAY,  0, MODE_ASCEND); //функция ищет самое близкое к текущей цене значение
 if (Bid == massiv[S])//если текущая цена равна значению возвращенному  функцией .
 if (Bid==Price  )// и данная цена есть цена открытия нового бара
 OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP,"jfh",123 );//открыть ордер       
}