[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 418

 
sss2019:


Merci. Donc, la période M1 correspond à la valeur 1, et la période M5 correspond à la valeur 5, donc cela signifie que la période H1 correspond à la valeur 60, et la période H4 correspond à la valeur 240, n'est-ce pas ?


Oui, c'est vrai.

PERIOD_M1 1 1 минута
PERIOD_M5 5 5 минут
PERIOD_M15 15 15 минут
PERIOD_M30 30 30 минут
PERIOD_H1 60 1 час
PERIOD_H4 240 4 часа
PERIOD_D1 1440 1 день
PERIOD_W1 10080 1 неделя
PERIOD_MN1 43200 1 месяц
0 (ноль) 0 Период текущего графика

 

Bonjour !

Aidez-moi à comprendre. J'essaie d'écrire un indicateur simple, mais il donne en quelque sorte des valeurs vides.

Il me semble que l'erreur se situe quelque part à cet endroit.

ExtVolumesBuffer[i]=dVolume;


car le champ de cette opération dans le tableau ExtVolumesBuffer ne change rien.

Je comprends que quelque part j'ai fait une erreur, mais je ne comprends pas où.

Merci d'avance !

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_buffers 1
#property indicator_color1 Black
//---- indicator buffers
double ExtVolumesBuffer[];
double emaExtVolumesBuffer[];

//+------------------------------------------------------------------+
int init()
{
//---- indicator buffers mapping
SetIndexBuffer(0,emaExtVolumesBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
//---- sets default precision format for indicators visualization
IndicatorDigits(0);
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("emaVolumes");
SetIndexLabel(0,"emaVolumes");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i,nLimit,nCountedBars;
//---- bars count that does not changed after last indicator launch.
nCountedBars=IndicatorCounted();
//---- last counted bar will be recounted
if(nCountedBars>0) nCountedBars--;
nLimit=Bars-nCountedBars;
//----
for(i=0; i<nLimit; i++)
{
double dVolume=Volume[i];
ExtVolumesBuffer[i]=dVolume;
emaExtVolumesBuffer[i]=iMAOnArray(ExtVolumesBuffer,0,10,0,MODE_EMA,i);

Print(Volume[i],Volume[i+1],Volume[i+2],Volume[i+3]);
Print(ExtVolumesBuffer[i],ExtVolumesBuffer[i+1],ExtVolumesBuffer[i+2],ExtVolumesBuffer[i+3]);
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
 
sss2019:


Merci. Donc la période M1 correspond à la valeur 1, et la période M5 correspond à la valeur 5, il s'avère donc que la période H1 correspond à 60, et la période H4 à 240 n'est-ce pas ?

J'ai besoin que cette construction fonctionne : lorsque la période M1 est sélectionnée, le cas 1 et lorsque la période M15 est sélectionnée, le cas 15. Cela fonctionnera-t-il, ou faut-il faire le cas 1, le cas 2, le cas 3 - dans l'ordre ?

int CurrentGrafPeriod ()
{
   
int Ba;
int GrafPeriod = Period();    
  switch(GrafPeriod)
    {
 
    case 1 :  Ba = 60; break;
    case 5 :  Ba = 12; break;
    case 15 : Ba = 4;  break;
    case 30 : Ba = 2;  break;
    case 60 : Ba = 1;  break;
    }
return(Ba);
}

if(CurrentGrafPeriod () == 1){ваше исполнение}
if(CurrentGrafPeriod () == 5){ваше исполнение}
и так далее...
mais c'est une théorie - je ne sais pas si cela fonctionnera....
 
sss2019:


Merci. Donc, la période M1 correspond à la valeur 1, et la période M5 correspond à la valeur 5, donc cela signifie que la période H1 correspond à la valeur 60, et la période H4 correspond à la valeur 240, n'est-ce pas ?

Je veux que cette construction fonctionne : lorsque la période M1 est définie comme le cas 1 et lorsque la période M15 est définie comme le cas 15. Cela fonctionnera-t-il de cette façon ou faut-il faire le cas 1, le cas 2, le cas 3 - dans l'ordre ?


Tout d'abord, vous feriez mieux d'utiliser des constantes nommées au lieu des chiffres 1, 5, etc. : PERIOD_M1, PERIOD_M5, etc.

Deuxièmement, il y a une erreur dans votre exemple. La variable Ba prendra toujours la valeur 1.

 
sss2019:


Merci. Donc, la période M1 correspond à la valeur 1, et la période M5 correspond à la valeur 5, donc cela signifie que la période H1 correspond à la valeur 60, et la période H4 correspond à la valeur 240, n'est-ce pas ?

Je veux que cette construction fonctionne : lorsque la période M1 est définie comme le cas 1 et lorsque la période M15 est définie comme le cas 15. Cela fonctionnera-t-il ou faut-il faire le cas 1, le cas 2, le cas 3 - dans l'ordre ?

1) Cela fonctionnera si vous ajoutez une pause dans chaque ligne.

2) Au lieu de 1, 5, 15, il est préférable d 'utiliser PERIOD_M1, PERIOD_M5, PERIOD_M15, etc.

[Deleted]  

Bonjour, je viens de constater que le robot de trading ne ferme pas les positions, environ une fois sur 50, lorsqu'il atteint un profit. Il doit alors tout fermer, les ordres en attente et tous les autres, et se remettre en place. Le fait de ne pas fermer crée une confusion dans les ordres et des pertes.

Pouvez-vous imaginer que parfois il s'avère qu'un ordre, qui a été définitivement fermé au takeprofit, a un ordercloseprice égal à zéro ! !!!!.

Ici, regardez la capture d'écran, voici la cinquième ligne à partir du bas ; l'ordre, conventionnellement appelé 49, s'est fermé sur TakeProfit. Et dans la neuvième ligne en partant du bas La commande de fermeture de l'entreprise est égale à zéro !!!!!

 
PapaYozh:

Deuxièmement, il y a une erreur dans votre exemple. La variable Ba prendra toujours la valeur 1.

Et pourquoi ? Est-ce qu'il manque une pause ?
 
dkfl.zrjdktdbx:

Bonjour, je viens de constater que le robot de trading ne ferme pas les positions, environ une fois sur 50, lorsqu'il atteint un profit. Il doit alors tout fermer, les ordres en cours et tous les autres, et se remettre en place. Le fait de ne pas fermer crée une confusion dans les ordres et des pertes.

Pouvez-vous imaginer que parfois il s'avère qu'un ordre, qui a été définitivement fermé au takeprofit, a un ordercloseprice égal à zéro ! !!!!.

Vous pouvez voir dans la capture d'écran ci-dessous, ici la cinquième ligne ; l'ordre nominalement appelé 49 s'est fermé sur TakeProfit. Et dans la neuvième ligne en partant du bas, l'Ordreclosepriche est égal à zéro !!!!!.


Il ne s'agit pas de l'ordreclossepriche - mais du prix Clowes - prix de clôture de l'ordre.

Le code de votre conseiller expert doit être corrigé. C'est celui qui se bat.

[Deleted]  

Je vois. Ce n'est pas comme s'il y avait quelque chose de particulièrement compliqué dans le code... Je vais le poster maintenant.

Lorsque je passe des commandes, j'économise le temps dans wremjapomnim. Dès qu'un ordre est fermé à currentprofit, je supprime tous les ordres et je me souviens à nouveau de l'heure dans le wremjapomnim pyrimen et je les fixe.

for ( i=OrdersHistoryTotal();i>0;i--){ OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY  );
Alert( "wremjapomnim " ,wremjapomnim, "  OrderCloseTime(        )   ",  OrderCloseTime( ),  " ",i , " OrderTakeProfit( ) " ,OrderTakeProfit( ),
  " OrderClosePrice(    )  ",OrderClosePrice(   ) );
if ( OrderTakeProfit( )==OrderClosePrice(       )&&wremjapomnim<OrderCloseTime( )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)<2*Point)
   &&wremjapomnim<OrderCloseTime(       )|| (NormalizeDouble(OrderClosePrice()-OrderTakeProfit(), Digits)>-2*Point)&&wremjapomnim<OrderCloseTime(       )){C=0;A=1 ;  Alert("C",C,"A",A);
   for ( int ii=OrdersTotal();ii>0;ii--){ OrderSelect(ii-1,SELECT_BY_POS );
   if( OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol()|| OrderMagicNumber( )==1000 &&OrderSymbol()==Symbol()){ 
  OrderDelete(OrderTicket( )) ; Alert ("OrderDelete-vse",  GetLastError( ) ); stsBUY=0;stsSELL=0;
   OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);Alert ("OrderClose-vse",  GetLastError( ) ); C=0; }     }              }
   
                                                      } 
 
 
melnikas:

Bonjour !

Veuillez m'aider à comprendre. J'essaie d'écrire un indicateur simple, mais il donne en quelque sorte des valeurs vides.

Il me semble que l'erreur se situe quelque part à cet endroit.


car le champ de cette opération dans le tableau ExtVolumesBuffer ne change rien.

Je comprends que j'ai fait une erreur quelque part, mais je ne comprends pas où.

Merci d'avance !


Mon cas est-il si compliqué ?