Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 97

 

Bon après-midi, Messieurs)

J'essaie de préparer des données pour la formation d'un réseau neuronal. La tâche est.

Avoir une matrice, où par exemple chaque ligne (moment - barre) est un vecteur d'entrée, et les colonnes par exemple 10000. Que faire s'il y a des données dynamiques (nombre de lignes1, lignes2), et que leur nombre change à différents moments.

Par exemple, une matrice est chargée dans un réseau, chaque ligne est un vecteur d'apprentissage, mais pour chaque ligne, il y a un nombre n de lignes qui changent dynamiquement dans le temps.

Une conjecture de solution possible est d'ajouter des colonnes supplémentaires à la matrice égale au nombre de colonnes de la ligne dynamique, il s'avère que chaque vecteur aura des colonnes de la dénamique, mais comme si d'une seule ligne, juste prosumée.

par exemple

1er vecteur

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "ligne1 dynamique" 1 1 1 1 1 1

ssssssssssssssssssssssssssssss "ligne2 dynamique" 1 1 1 1 1

solution

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "ligne1 dynamique" 2 2 2 2 2 2

 
Top2n:

Bon après-midi, Messieurs)

J'essaie de préparer des données pour la formation d'un réseau neuronal. La tâche est.

Avoir une matrice, où par exemple chaque ligne (moment - barre) est un vecteur d'entrée, et les colonnes par exemple 10000. Que faire s'il y a des données dynamiques (nombre de lignes1, lignes2), et que leur nombre change à différents moments.

Par exemple, une matrice est chargée dans un réseau, chaque ligne est un vecteur d'apprentissage, mais pour chaque ligne, il y a un nombre n de lignes qui changent dynamiquement dans le temps.

Une conjecture de solution possible est d'ajouter à la matrice des colonnes supplémentaires égales au nombre de colonnes de la rangée dynamique, il s'avère que chaque vecteur aura des colonnes de la dénamique, mais comme si d'une seule rangée, juste prosumée.

par exemple

1er vecteur

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "ligne1 dynamique" 1 1 1 1 1 1

ssssssssssssssssssssssssssssss "ligne2 dynamique" 1 1 1 1 1

solution

1.365 0 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 ... "ligne1 dynamique" 2 2 2 2 2 2

Et comment apprendre une langue qui change dynamiquement (une fois par heure, disons) son vocabulaire ? C'est comme ça que fait un réseau neuronal.
 
Il y a donc MQL5, comme je le comprends. Ou est-il identique ?
 
Andrey Sokolov:
Il y a donc MQL5, comme je le comprends. Ou est-il identique ?
Exactement la même chose.
 
Bon après-midi. J'ai créé un EA, il fonctionne bien, mais si j'éteins le terminal avec l'EA en cours d'exécution et que je rallume le terminal, l'EA recommence à compter. Alors, j'ai une question. Que dois-je écrire dans mon EA, pour qu'il réinitialise les paramètres d'entrée au démarrage ?
 
XFaost:
Bon après-midi. J'ai créé un EA, il fonctionne bien, mais si j'éteins le terminal avec l'EA en cours d'exécution et que je rallume le terminal, l'EA recommence à compter. Alors, j'ai une question. Que dois-je prescrire dans l'EA, pour qu'il réinitialise les paramètres d'entrée au démarrage ?
Je veux que mon conseiller expert ne réinitialise pas les paramètres d'entrée, mais qu'il collecte des informations sur les ordres qui ont été ouverts avant sa fermeture.
 
XFaost:
Bon après-midi. J'ai créé un EA, il fonctionne bien, mais si j'éteins le terminal avec l'EA en cours d'exécution et que je rallume le terminal, l'EA recommence à compter. Alors, j'ai une question. Que dois-je écrire dans mon EA, pour qu'il réinitialise les paramètres d'entrée lorsque je le démarre ?
Veuillez décrire le fonctionnement de l'EA. Peut-être devez-vous utiliser un autre principe. Et si vous avez encore besoin de réinitialiser, vous devez d'abord définir ce que l'on entend par "au départ". Et en général, une réinitialisation est une transition vers la position initiale. Notez les paramètres initiaux et réglez-les au bon moment.
 

Salutations. Pouvez-vous me dire ce qui ne va pas ?

L'EA place des ordres avec des stops au-dessus et au-dessous du prix. Si l'un d'entre eux se déclenche, le stop est ajusté si le prix s'éloigne du stop plus que prévu, si le prix se rapproche du stop alors aucun changement.

Au début, je n'ai écrit que l'ordre d'achat et cela a fonctionné comme prévu. Si j'ajoute une image miroir pour la vente, les arrêts seront corrigés de la valeur définie quelle que soit l'évolution du prix.

En général, si séparément, ou pour acheter ou pour vendre - tout fonctionne comme il se doit, mais les deux parties ensemble - il ya un bug.

#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot             = 0.01;
extern int    StopLoss        = 50;
extern int    Slippage        = 5;
extern int    Delta           = 60;
extern int    Delta2          = 170;
extern int    Magic           = 321;

int ticket;
double price, sl, sl2;
datetime counted_bar = 0;

int OnInit()
  {
    if (Digits == 3 || Digits == 5)
   {

       StopLoss      *= 10;
       Delta         *= 10;
       Delta2        *= 10;
      
   }

  
   return(INIT_SUCCEEDED);
  }


void OnTick() {
//////        ПРОДАЖА  ///////////////////////////////////////////////////////
if (SellLimitCount()==0 && SellCount()==0)
{    
  price = NormalizeDouble(Bid - Delta*Point, Digits);
  sl = NormalizeDouble(price + StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_SELLSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Red);
}

if (SellCount()!=0)
  {
   if (Bid < (OrderStopLoss() - NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Bid + StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Red)) Print ("Sell_Order_Modify_Ok");
     else Print ("ERROR_Sell_Order_Modify");
     }  
  }
if (SellLimitCount()!=0)
{
  if(Bid > (OrderOpenPrice() + NormalizeDouble (Delta2*Point, Digits)))
   {    
    if (OrderDelete(ticket, Red)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Odrer_Delete");
   }  
}
/////////////////////////////////////////////////////////////////////////////////
///////       ПОКУПКА ////////////////////////////////////////////////////////
if (BuyLimitCount()==0 && BuyCount()==0)
{
  price = NormalizeDouble(Ask + Delta*Point, Digits);
  sl = NormalizeDouble(price - StopLoss*Point, Digits);
  ticket = OrderSend (Symbol(), OP_BUYSTOP, Lot, price, Slippage, sl, 0, "", Magic, 0, Blue);
}

if (BuyCount()!=0)
  {
    if (Ask > (OrderStopLoss() + NormalizeDouble (StopLoss*Point, Digits)))
     {
     sl = NormalizeDouble (Ask - StopLoss*Point, Digits);
     if (OrderModify(ticket, price, sl, 0, 0, Blue)) Print ("Buy_Order_Modify_Ok");
     else Print ("ERROR_Buy_Order_Modify");
     }  
  }
if (BuyLimitCount()!=0)
{
  if(Ask < (OrderOpenPrice() - NormalizeDouble (Delta2*Point, Digits)))
   {
    if (OrderDelete(ticket, Blue)) Print ("BuyLimit_Order_Delete_Ok");
    else Print ("ERROR_BuyLimit_Orde_Delete");
   }  
}
///////////////////////////////////////////////////////////////////////////////

}
//+------------------------------------------------------------------+
int BuyLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUYSTOP)
count++;}}}return(count);}

int BuyCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_BUY)
count++;}}}return(count);}

int SellLimitCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELLSTOP)
count++;}}}return(count);}

int SellCount(){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true){
if(OrderMagicNumber()==Magic){
if(OrderType()==OP_SELL)
count++;}}}return(count);}
 
Andrey Sokolov:

Salutations. Pouvez-vous me dire ce qui ne va pas ?

L'EA place des ordres avec des stops au-dessus et au-dessous du prix. Si l'un d'entre eux se déclenche, le stop est ajusté si le prix s'éloigne du stop plus que prévu, si le prix se rapproche du stop alors aucun changement.

Au début, je n'ai écrit que l'ordre d'achat et cela a fonctionné comme prévu. Si j'ajoute une image miroir pour la vente, les arrêts seront corrigés de la valeur définie quelle que soit l'évolution du prix.

En général, si séparément, ou pour acheter ou pour vendre, tout fonctionne comme il se doit, mais les deux parties ensemble - il ya un bug.

...

L'ensemble du code que vous nous avez montré est un bug, n'est-ce pas ? En tout cas, la fonction OnTick est presque entièrement un bug...

 
Vitalie Postolache:

Un bug, vous voulez dire l'ensemble du code affiché ?

Lorsqu'il y a les deux parties du code, à la fois pour l'achat et pour la vente, après le déclenchement de l'ordre en attente, son arrêt est corrigé dans n'importe quelle direction de prix pour une raison quelconque. Et lorsqu'il n'y a qu'une partie Achat ou Vente du code, le stop est corrigé comme prévu, uniquement lorsque le prix s'en éloigne.