[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 700

 
cyclik33:


Je vous ai dit pourquoi le code ne fonctionne pas correctement - vous l'avez mis au mauvais endroit... :) Je pense que si vous dévissez les roues et les mettez dans le coffre, vous n'irez pas loin, même si les roues sont là et que les portes ferment.... :)
 
T-G:

La question peut être triviale, le conseiller expert est en train de négocier sur M1, le signal d'ouverture d'un ordre est arrivé, supposons que le stop est court et que l'ordre a été fermé sur le sl. mais la condition d'ouverture existe toujours.

Quelle est la meilleure façon de s'assurer que la commande ne sera pas ouverte à nouveau à la même minute ?

Vérifiez l'ouverture d'une nouvelle bougie. Si c'est un nouveau, tu l'ouvres, si c'est un ancien, tu ne le fais pas...
 
ToLik_SRGV:

Le nombre de chiffres dans OrderSelect() commence à zéro. Et vous avez 1, ce qui signifie que vous cherchez un deuxième ordre, bien que vous n'en ayez qu'un seul sur le marché, c'est pourquoi cela ne fonctionne pas.

Merci, j'avais oublié.
 
ToLik_SRGV:

Boris, une petite correction dans le code, j'ai oublié d'ajouter la réinitialisation de la position du tableau, lors du retour au lot d'origine :


Je ne suis pas sûr de l'avoir mis au bon endroit. Après une perte, il peut ouvrir le lot initial, si celui-ci est également perdant, il peut ouvrir à nouveau le lot initial.

Et parfois, après la première perte, il faut 0,4.

Je dois avoir mis quelque chose au mauvais endroit ?

 
cyclik33:


J'ai une façon très étrange de travailler avec ce code. Après en avoir perdu un, il peut ouvrir le premier lot et si celui-ci perd à nouveau, il peut ouvrir le premier lot.
Et parfois après la première perte prend 0,4.
Je dois avoir mis quelque chose au mauvais endroit ?

Boris, une petite correction dans le code, j'ai oublié d'ajouter la réinitialisation de la position du tableau, lors du retour au lot d'origine :

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ ДО БАЗОВОГО
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
 
artmedia70:
Je vous ai dit pourquoi il ne fonctionne pas correctement - vous l'avez mis au mauvais endroit... :) Je pense que si vous dévissez les roues et que vous le mettez dans le coffre, vous n'irez pas loin, bien qu'il semble que les roues soient là et que les portes ferment... :)


Je suis tout à fait d'accord avec vous. Mais je ne critique pas votre code, j'ai juste dit que j'avais un problème avec lui), d'ailleurs, j'ai de nouveau un problème avec lui, si cela ne vous dérange pas - dites-moi ce qui ne va pas, j'aimerais vraiment comprendre ce que je fais de travers.

extern color colorOpenBuy = Blue ;
extern colorCloseBuy = Aqua ;
extern colorOpenSell = Red ;
extern colorCloseSell = Aqua ;


void deinit() {
Comment(") ;
}

double Lots_New = Lot ;


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if ( !(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("L'heure du commerce n'est pas encore arrivée !") ;
return(0) ;

Je l'ai collé ici, comme vous me l'avez dit, avant la fonction Start, mais à la compilation, il est dit 'Lot' - initialisation attendue D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

S'il vous plaît, dites-moi ce que ça peut être.

 
artmedia70:
Vérifiez l'ouverture d'une nouvelle bougie. Si c'est nouveau, on ouvre, si c'est ancien, on ne le fait pas...
quelle est la meilleure façon de procéder ?
 
cyclik33:


Je suis tout à fait d'accord avec vous. Mais je ne critique pas votre code, je dis simplement qu'il me pose quelques problèmes. D'ailleurs, j'ai un autre problème avec lui, si vous le voulez bien - dites-moi ce qui ne va pas, j'aimerais vraiment savoir ce que je fais de travers.

extern color colorOpenBuy = Blue ;
couleur externe colorCloseBuy = Aqua ;
extern colorOpenSell = Red ;
couleur externe colorCloseSell = Aqua ;


void deinit() {
Commentaire (") ;
}

double Lots_New = Lot ;


//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if ( !(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Le temps du commerce n'est pas encore arrivé !") ;
retour(0) ;

Je l'ai inséré ici, comme vous me l'avez dit, avant la fonction Start, mais lors de la compilation, il est indiqué 'Lot' - initialisation attendue D:\MetaTrader\experts\Prostoj_2.mq4 (39, 20)

S'il vous plaît, dites-moi ce que ça peut être.

Où Lot est-il initialisé dans votre code ?

extern color colorOpenBuy = Blue;
extern color colorCloseBuy = Aqua;
extern color colorOpenSell = Red;
extern color colorCloseSell = Aqua;
extern double Lot = 0.1;
double Lots_New;

void deinit() {
Comment("");
}

//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start(){
if (lFlagUseHourTrade){
if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
Comment("Time for trade has not come else!");
return(0);

Ensuite, seulement après avoir vérifié la présence d'orignaux, modifiez Lots_New comme écrit précédemment, ou attribuez-lui la valeur = Lot ;

 

Ouais... J'ai du mal avec les tableaux... En essayant de remplir un tableau avec les données de l'inducteur, la petite fonction est une impasse boo-o-o-o-o-little... Pouvez-vous me dire ce que je fais mal ?

double      TempIND[50]; 
void   SaveDataIND(double TempIND[], int nBars)
{
   ArrayResize(TempIND,nBars);
   for (int j=0; j<=nBars-1; j++)
      {
         TempIND[j]=iAD(NULL,PERIOD_M5,j);       // ЗДЕСЬ ОШИБКА array item cannot be assigned
         Print("TempIND[",j,"] = ",TempIND[j]);
      }

}

Je l'appelle comme ça :

SaveDataIND(TempIND, 20);
Où est le problème ?
 
artmedia70:

Ouais... J'ai du mal avec les tableaux... En essayant de remplir un tableau avec les données de l'inducteur, la petite fonction est une impasse boo-o-o-o-o-little... Pouvez-vous me dire ce que je fais mal ?

Je l'appelle comme ça :

Où est le problème ?



votre chien en passant des paramètres à la fonction, si vous passez comme SaveDataIND(double TempIND[])

double TempIND[ ] est en fait un nouveau tableau pour la fonction mais sans le droit de changer les paramètres, essayez SaveDataIND(double & TempIND[])