[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 449
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Je comprends que je ne veuille pas spéculer, mais pouvez-vous au moins me donner un indice si le problème est clair pour vous ?
Donnez-moi tout le code
Non, cela signifie seulement que les données correspondent à un morceau d'histoire.
Vous auriez pu le saisir manuellement, par exemple. Ou écrit à partir d'un fichier texte. Ou vous pourriez l'avoir obtenu par un calcul.
Parce que même en entrant des données conditionnelles "1,25 1,16 1,73 1,35", nous pouvons obtenir l'historique d'une monnaie il y a plusieurs années. Mais cela ne signifie pas que nous avons mis en place un tableau chronologique.
J'ai un peu modifié le script original :
1. J'ai copié seulement 5 derniers prix d'ouverture dans le tableau personnalisé.
2. Calculer le tableau personnalisé obtenu par les 5 prix d'ouverture copiés.
Voici ce que j'ai obtenu :
Comme vous pouvez le voir sur la figure, les prix ouverts sont indexés dans l'ordre inverse (comme en témoignent le NOMBRE de prix ouverts en barre (dans l'ordre croissant) et le TEMPS de prix ouverts en barre (dans l'ordre décroissant)), c'est-à-dire que le tableau est organisé comme un tableau-série temporelle.
Mais la fonction ArrayGetAsSeries renvoie néanmoins 0 (faux), ce qui signifie : le tableau utilisateur n'est PAS organisé comme un tableau-temps.
Demande de clarté très aimable
Question: comment expliquer cela ?
P.S. Merci d'avoir répondu à mes questions.
J'ai un peu modifié le script original :
1. J'ai copié seulement les 5 derniers prix d'ouverture dans un tableau personnalisé.
2. Ras a traité le tableau personnalisé résultant par les 5 prix d'ouverture copiés.
Voici ce que j'ai obtenu :
Comme vous pouvez le voir sur la figure, les prix ouverts sont indexés dans l'ordre inverse (comme en témoignent le NOMBRE de prix ouverts en barre (dans l'ordre croissant) et le TEMPS de prix ouverts en barre (dans l'ordre décroissant)), c'est-à-dire que le tableau est organisé comme un tableau-série temporelle.
Mais la fonction ArrayGetAsSeries renvoie néanmoins 0 (faux), ce qui signifie : le tableau utilisateur n'est PAS organisé comme un tableau-temps.
Veuillez préciser
Question: comment l'expliquer ?
P.S. Merci d'avoir répondu à mes questions.
Avez-vous essayé d'utiliser le
Avez-vous essayé les fonctions
i_maTF == Période() ? ?????
i_maPeriod prend une valeur raisonnable ???
Peut-être que quelque chose ne va pas avec i_maShiftByPrice ???
Il est difficile d'être plus précis.
Les informations qu'il produit ne sont pas correctes. Voici le code complet :
Le journal du conseiller expert montre ceci :
Comme vous pouvez le voir, les variables i_maTF, i_maPeriod et i_maPrice ne sont pas celles que j'ai initialisées. Qu'est-ce qu'il y a ?
Sort les mauvaises informations. Voici le code complet :
Le journal de l'expert montre ceci :
Comme vous pouvez le constater, les variables i_maTF, i_maPeriod et i_maPrice ne sont pas les mêmes que celles que j'ai initialisées. Qu'est-ce qu'il y a ?
Je me demande comment vous avez réussi à obtenir quelque chose dans le journal si le code que vous avez soumis ne compile pas ?
Ah, si vous le compilez, il n'y aura pas de bizarrerie.
Je me demande comment vous avez réussi à obtenir quelque chose dans le journal si le code que vous avez présenté ne compile pas ?
Ah, si vous le compilez, vous n'aurez pas de bizarreries.
Je compile toujours normalement.
J'ai nettoyé le code des imprimantes et variables supplémentaires afin de ne pas embrouiller les gens. Mais je ne les ai pas supprimés ci-dessous, donc ça n'a pas compilé. Voici le code complet qui se compile :
Aidez-moi ! Comment faire pour qu'un EA ferme un ancien ordre lorsqu'il en ouvre un nouveau ? Dans le testeur de stratégie, cela fonctionne bien, mais sur le compte réel, pour une raison quelconque, lorsque j'en ouvre un nouveau, l'ancien quitte ????????. Je suis un zéro total en programmation(((
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_SELL=true;
extern int SL_sell=62; //---входные параметры по шортам
extern int Risk_sell=0;
//ooooooooooooooooooooooooooooooooooooooooooooooooo
//---- other parameters
static int prevtime=0;
int ticket=0;
int x=1;
//----------------------------------------------
int Magic_BUY =123;
int Magic_SELL =321;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits == 5) x=10;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//oooooooooooooooooooooooooooooooooooooooooooooooooooo
if (Time[0] == prevtime) return(0);
prevtime = Time[0];
if (!IsTradeAllowed()) {
prevtime=Time[1]; MathSrand(TimeCurrent());Sleep(30000 + MathRand()); //--- формировка бара---
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Trade( Magic_BUY, In_BUY,Ask,0,2, SL_buy, Risk_buy); //---торговля по лонгам
Trade(Magic_SELL,In_SELL,Bid,2,0, SL_sell,Risk_sell); //---торговля по шортам
//ooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
return(0);//-----------выход из стартовой функции------------
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void Trade(int mn,bool flag,double price,int period_1,int period_2,int sl,int Risk) {
int total=OrdersTotal();
for (int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//---проход по ордерам--
if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
if(Open[period_2]>Open[period_1]) { //----условие закрытия ордера---------
OrderClose(OrderTicket(),OrderLots(),price,5*x); RefreshRates();
}
return(0);
}
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooo
ticket = -1;
if ( flag &&
Open[period_1]>Open[period_2] && //----вход в рынок по условию---
OrdersTotal()<2 && //-----ограничения чемпионата------
AccountEquity()>200 &&
IsTradeAllowed()) {
if (mn<200) {
ticket= OrderSend(Symbol(), OP_BUY,lot(Risk_buy),Ask,5,Bid-x*sl*Point,0,DoubleToStr(mn,0),mn,0,Blue);
}
else {
ticket= OrderSend(Symbol(),OP_SELL,lot(Risk_sell),Bid,5,Ask+x*sl*Point,0,DoubleToStr(mn,0),mn,0, Red);
}
RefreshRates();
if ( ticket < 0) { Sleep(30000); prevtime = Time[1]; }
} //-- Exit ---
return(0); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
double lot(int R) { if (R<0)R=0; if (R>80)R=80; //------корректность ввода -------
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
int o = MathAbs(MathLog(minlot) *0.4343) + 0.5;
double lot = minlot;
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
lot = NormalizeDouble(AccountFreeMargin() * 0.00001*R, o);//---
if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) {
lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), o);
}
//ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
if(lot < minlot) lot = minlot;
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
if(lot > maxlot) lot = maxlot;
return(lot); }
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_end_film_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Ou peut-être écrire un autre EA qui fonctionnerait sur le principe de 1 a ouvert, 2 a ouvert-1 a fermé, 3Ouvré-2 a fermé, etc. L'aide est vraiment, vraiment nécessaire ! !!
Aidez-moi ! Comment faire pour qu'un EA ferme un ancien ordre lorsqu'il en ouvre un nouveau ? Dans le testeur de stratégie, cela fonctionne bien, mais sur le compte réel, pour une raison quelconque, lorsque j'en ouvre un nouveau, l'ancien quitte ? ???????. Je n'ai pas la moindre idée de la programmation(( !)
//ooooooooooooooooooooooooooooooooooooooooooooooooo
extern bool In_BUY=true;
extern int SL_buy=62; //---входные параметры по лонгам
extern int Risk_buy=0;
Remplacer
à
À ce stade, mon objectif est de comprendre comment fonctionne telle ou telle fonction et, dans ce cas précis, comment fonctionne la fonction ArrayGetAsSeries. J'ai cru comprendre que vous pouvez utiliser la fonction ArraySetAsSeries avec le paramètre set=true, qui définit de manière forcée l'indexation, comme dans array-timeseries. Mais je veux comprendre pourquoi, dans mon cas, la fonction ArrayGetAsSeries renvoie 0, alors que le tableau ressemble à une série chronologique (c'est-à-dire qu'il est indexé comme une série chronologique).
Précisément parce qu'il ne s'agit que d'une série chronologique.
Ce n'est que votre opinion personnelle. Et si vous y mettez les chiffres 1, 2, 1.2, 2.1, vous obtenez une série chronologique pour le porc à partir de 1927 (les chiffres sont conditionnels). Mais cela ne fait pas du tableau une série temporelle - vous devez le spécifier explicitement avec la fonction