Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 537

 
VoDyaMon:

Si vous écrivez un script simple qui crée un objet de type OBJ_ARROW_RIGHT_PRICE puis le supprime, l'objet n'est pas supprimé. De plus, la commande ObjectType révèle soudainement que l'objet créé n'est pas de type OBJ_ARROW_RIGHT_PRICE (==36), mais ==22 c'est-à-dire une simple "flèche vers le haut" ! !! Suis-je le seul à avoir ce problème ou est-ce que tout le monde l'a ?

Il y avait déjà des avis d'"experts" sur cette question : comme lire l'aide, ou pas assez de mémoire :) .

La mémoire est suffisante.

Il semble que la commande ObjectCreate dessine un objet du type OBJ_ARROW_RIGHT_PRICE , qui ne peut pas être supprimé par la commande ObjectsDeleteAll(0,OBJ_ARROW_RIGHT_PRICE), mais peut être supprimé par la commande ObjectsDeleteAll(0,22), comme si nous n'avions pas l'étiquette de prix correcte mais une "flèche vers le haut". A qui la faute ?

... ... ...

Pour supprimer un objet de type OBJ_ARROW_RIGHT_PRICE, utilisez la commande ObjectsDeleteAll(0,OBJ_ARROW), avec indication obligatoire de la sous-fenêtre.

p.s. Un objet de type OBJ_ARROW est une "flèche" quelconque, pas seulement une "flèche vers le haut". ObjectCreate(...OBJ_ARROW...) crée immédiatement une "flèche vers le haut". Pourquoi ce n'est pas dans l'aide ?

Écrivez dans ce fil. Au moins, les développeurs sont là.
 

Il y a un script :

#property show_confirm;
int slip=5;

void start()
{
  for(int i=OrdersTotal()-1;i<=0;i--)
  {
   int p=0; double price=0;
      if(OrderSelect(i,SELECT_BY_POS))
     {
       switch(OrderType())
        {
         case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
         case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
         default: break;
        }
         while(p<5)                              
           {                                    
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==true) 
               break;                   
            else                              
              {
               p++;                              
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(1000);                       
              }
           }
     }
 }
}

Qui ne tente même pas de fermer un seul ordre de marché actuellement ouvert. Pourquoi ?

Il n'écrit pas d'erreurs dans le journal :

2014.03.10 04:39:11.093 Script closeallmarket AUDUSD,M30 : supprimé<br / translate="no"> 2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30 : uninit raison 0
2014.03.10 04:39:11.093 closeallmarket AUDUSD,M30 : initialisé
2014.03.10 04:39:10.109 Script closeallmarket AUDUSD,M30 : chargé avec succès
 

Remplacer

 for(int i=OrdersTotal()-1;i<=0;i--)

à

 for(int i=OrdersTotal()-1;i>=0;i--)
 

Bonjour Mr. les professionnels.Ne refusez pas un débutant en programmation, regardez le code, pour voir s'il est écrit correctement. Qui n'est pas trop paresseux pour s'en occuper. Je ne peux pas la tester dans le testeur de stratégie car elle est multidevise. Fichier avec le code et les indicateurs joint à l'archive.



Dossiers :
 

Après-midi.

Je n'arrive pas à faire un code analogue de php à mql4 :

$massiv = array(
            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877            
            );
                        
            asort($massiv);
            $i=0;
            foreach ($massiv as $key => $val){$i++;$massiv[$key]=$i;}
            
            $a="";
            ksort($massiv);
            foreach ($massiv as $key => $val){$a=$a.$val.".";}  

C'est-à-dire, à partir d'un tableau.

            "1" => 0.2145,
            "2" => 1.5447,
            "3" => 0.3544,
            "4" => 3.6541,
            "5" => 6.5441,
            "6" => 4.3217,
            "7" => 5.8354,
            "8" => 7.6877 

Besoin d'obtenir un tableau

            "1" => 1,
            "2" => 3,
            "3" => 2,
            "4" => 4,
            "5" => 7,
            "6" => 5,
            "7" => 6,
            "8" => 8 

J'ai besoin d'aide.

 
Roger:

Remplacer

à


Ohhhh... Mec, c'est une autre fois, merci ))))
 

J'essaie d'écrire un simple EA qui ferme toutes les positions sur mon compte lorsqu'il atteint les valeurs de profit ou de perte spécifiées dans la devise de dépôt (ouverte par plusieurs symboles), mais il ferme les positions dès qu'elles apparaissent ((()

Je ne comprends pas ce qui ne va pas :

input double tp_c = 80.0;
input double sl_c = 120.0;

input int slip=5;

 double profit_c = 0.0;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }
 
denis77515:

Bonjour Mr. les professionnels.Ne refusez pas un débutant en programmation, regardez le code, pour voir s'il est écrit correctement. Qui n'est pas trop paresseux pour s'en occuper. Je ne peux pas la tester dans le testeur de stratégie car elle est multidevise. J'ai joint un fichier avec le code et les indicateurs à l'archive.



Je suis très intéressé de savoir comment un débutant est si déterminé à trader avec un tel conseiller expert et à écrire un système de trading qui en vaut la peine. Je ne suis pas désolé pour le dépôt ?


Le code montre beaucoup d'erreurs sans entrer dans l'algorithme de trading, aucune tentative d'optimisation.

Veuillez trouver la différence entre vos fonctions CountBuy_JPY() CountSell_JPY() CountBuy_GBP() Dans la sortie de n'importe laquelle d'entre elles vous obtenez le même résultat, dans Buy toutes les positions ouvertes Buy, dans d'autres toutes les Sal. Essayez d'écrire toutes ces fonctions en une seule fois et obtenez deux tableaux liés avec les symboles et le nombre de commandes qu'ils contiennent.

Vous êtes aussi loin du Testeur que la lune. Vous devriez écrire des scripts pour chaque fonction et regarder ce que vous obtenez, puis lancer le débogueur et regarder toutes les variables. C'est la seule façon d'avancer progressivement.

 
evillive:

J'essaie d'écrire un simple EA qui ferme toutes les positions sur mon compte lorsqu'il atteint les valeurs de profit ou de perte spécifiées dans la devise de dépôt (ouverte par plusieurs symboles), mais il ferme les positions dès qu'elles apparaissent ((()

Je ne comprends pas ce qui ne va pas :


Analyser l'état ... Et le conseil est le même, utilisez les scripts d'impression, et commentez les opérations commerciales pour le moment et déboguez
.
if(profit_c > tp_c || profit_c < sl_c) closeall();   profit_c > 80 ИЛИ  profit_c < 120   
 
evillive:

J'essaie d'écrire un EA simple qui ferme toutes les positions sur mon compte lorsqu'il atteint les valeurs de profit ou de perte spécifiées dans la devise de dépôt (j'ouvre par plusieurs symboles), mais il ferme les positions dès qu'elles apparaissent ((()

Je ne comprends pas ce qui ne va pas :



input double tp_c = 80.0;
input double sl_c = - 120.0; //// minus 120

input int slip=5;

 double profit_c ;

void OnTick()
  {
   currencyprofit();
   if(profit_c > tp_c || profit_c < sl_c) closeall();
  }

double currencyprofit()
  {
   profit_c = 0.0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
         profit_c = profit_c + OrderProfit();
     }
   return(profit_c);
  }

void closeall()
  {
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
      int p=0; double price=0;
         if(OrderSelect(i,SELECT_BY_POS))
        {
          switch(OrderType())
           {
            case 0: price = MarketInfo(OrderSymbol(),MODE_BID); break;
            case 1: price = MarketInfo(OrderSymbol(),MODE_ASK); break;
            default: break;
           }
            bool tik= OrderClose(OrderTicket(),OrderLots(),price,slip,Red);
            if(tik==false) 
              {
               Print(__FUNCTION__,"_Error_",GetLastError()); 
               Sleep(3000);
               break;
              }
        }
     }
  }