[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 268

 

extern string AlliesO1 = "GBPUSD"; - валюта

string AlliesO[5]; - массив в котором хранятся валюты.



Так я проверяю нужно ли добавлять валюту в массив. (Изначально вместо валют нули, всего валют 5)

if (StringLen (AlliesO1)>2)
{
CountAlliesO++;
AlliesO [0] = AlliesO1;
}





Потом в цикле перебираю валюты и на каждой валюте открываю ордер.

for (int i=0;i<CountAlliesO;i++)

{
l_ticket_4 = OrderSend(AlliesO[i], OP_BUY, Lots, NormalizeDouble(Ask, Digits), l_slippage_8, iif(StopLoss == 0.0, 0, NormalizeDouble(Ask - StopLoss / MathPow(10, Digits), Digits)), iif(TakeProfit == 0.0, 0, NormalizeDouble(Ask +
TakeProfit / MathPow(10, Digits), Digits)), 0, Magic, 0, CLR_NONE);
Print ("Ticket " + Allies[i] + ": " + l_ticket_4);
}



Voici ce qu'il produit :

22:05:25 RSI_Valut_Test2 EURUSD,H1 : CountAlliesO : 2
22:05:25 RSI_Valut_Test2 EURUSD,H1 : CountEnemyO : 2
22:05:25 RSI_Valut_Test2 EURUSD,H1 : Alliés : GBPUSD // - dans la boucle print AlliesO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1 : Alliés : GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1 : Ennemi : USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1 : Ennemi : USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1 : Ticket USDCHF : -1

22:05:25 RSI_Valut_Test2 : le nom du symbole pour la fonction OrderSend doit être une chaîne de caractères.


Eh bien en général, je ne peux pas donner tout le code, car on m'a demandé de ne pas le distribuer... On a ajouté quelques imprimantes qui produisent ces données... Pourquoi est-ce que ça dit que ce n'est pas une chaîne, si c'est déclaré comme une chaîne ?


Veuillez m'aider, merci d'avance.

 

Bonsoir à tous. Veuillez m'indiquer comment écrire une fonction appropriée pour fermer un ordre après l'ouverture de quelques barres, et comment optimiser ce nombre.

 

CountBars - nombre de barres.

Ticket - numéro de commande.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Exécuté à chaque tick, pas sûr du nombre de barres, cela peut être -1, ou +1, car je ne sais pas exactement comment le décalage est calculé... Eh bien, il n'est pas difficile de vérifier sur M1...

C'est comme ça ?

 
PODLIY16:

CountBars - nombre de barres.

Ticket - numéro de commande.

CloseAfterSomeBar (int CountBars, int Ticket)

{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES)
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (CountBars>=BarShift)
{
if (OrderType() = OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Exécuté à chaque tick, pas sûr du nombre de barres, cela peut être -1, ou +1, car je ne sais pas exactement comment le décalage est calculé... Eh bien, ce n'est pas difficile de vérifier sur M1...

C'est ça ?

 
isaev-av:

Je suppose que oui. Je ne suis pas un programmeur. Je vais essayer maintenant. L'essentiel est de le faire fonctionner sur le TF.
 
void CloseAfterSomeBar (int CountBars, int Ticket)
{
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES);
datetime date = OrderOpenTime();
int BarShift = iBarShift (Symbol(), 0, date, false);
if (BarShift>=CountBars)
{
if (OrderType() == OP_BUY)
OrderClose(Ticket,OrderLots(),Bid, (Ask - Bid) / Point, CLR_NONE);
else
OrderClose(Ticket,OrderLots(),Ask, (Ask - Bid) / Point, CLR_NONE);
}
}


Celui-ci est correct, il ferme l'ordre dès que la bonne barre s'ouvre, par exemple sur M1 je viens de l'essayer, l'ordre s'est ouvert à la neuvième minute, fermé à 11:01.

 
Pouvez-vous me dire comment superposer une MA à un indicateur RSI ou stohastique, c'est-à-dire prendre la MA non pas à partir d'un graphique mais d'un indicateur ?
 
Ça ne marche pas. Peut-être que quelqu'un peut le corriger. Bonsoir à tous. Veuillez m'indiquer comment écrire une fonction appropriée pour fermer un ordre après l'ouverture de quelques barres, et comment optimiser ce nombre.
Dossiers :
 

Essayez-le avec 2 nouvelles variables :


extern bool IfTrueThenCountBarWork = false ; // - si false, cette fonction ne fonctionnera pas, pour fonctionner il faut mettre true.

extern inttern CountBar = 0 ; // - nombre de barres après lesquelles fermer. J'ai décrit ci-dessus comment les barres sont comptées.


J'espère avoir fait quelque chose d'utile.

Dossiers :
 
PODLIY16:

Essayez-le avec 2 nouvelles variables :


extern bool IfTrueThenCountBarWork = false ; // - si vous définissez false, cette fonction ne fonctionnera pas, vous devez définir true pour qu'elle fonctionne.

extern int CountBar = 0 ; // - nombre de barres après lesquelles fermer. Comment les barres sont comptées, j'ai écrit plus haut.


J'espère vous avoir aidé d'une manière ou d'une autre.




Merci !