[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 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);
}



Questo è ciò che produce:

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: Alleati: GBPUSD // - nel ciclo stampa AlliesO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1: Alleati: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: Nemico: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Nemico: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: biglietto USDCHF: -1

22:05:25 RSI_Valut_Test2: il nome del simbolo per la funzione OrderSend deve essere una stringa


Beh, in generale così e così, non posso dare tutto il codice, come chiesto di non distribuire... Bene, sono state buttate lì un paio di stampanti che emettono questi dati... Perché dice che non è una stringa se è dichiarata come tale?


Per favore aiutatemi, grazie in anticipo.

 

Buona sera a tutti. Per favore, consigliate come scrivere una funzione adeguata per chiudere un ordine dopo che sono state aperte alcune barre, e come ottimizzare questo numero.

 

CountBars - numero di barre.

Biglietto - numero d'ordine.

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);
}
}


Esegui su ogni tick, non sono sicuro del numero di barre, potrebbe essere -1, o +1, perché non so esattamente come viene calcolato l'offset... Beh, non è difficile da controllare su M1...

È così?

 
PODLIY16:

CountBars - numero di barre.

Biglietto - numero d'ordine.

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);
}
}


Esegui su ogni tick, non sono sicuro del numero di barre, potrebbe essere -1, o +1, perché non so esattamente come viene calcolato l'offset... Beh, non è difficile controllare su M1...

È così?

 
isaev-av:

Credo di sì, non sono un programmatore, ora ci provo, l'importante è farlo funzionare sul 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);
}
}


Questo è corretto, chiude l'ordine non appena si apre la barra giusta, per esempio su M1 ho appena provato, l'ordine si è aperto al nono minuto, chiuso alle 11:01.

 
Potete dirmi come sovrapporre una MA a un indicatore RSI o Stocastico, cioè prendere la MA non da un grafico ma da un indicatore?
 
Non funziona. Forse qualcuno può correggerlo. Buona sera a tutti. Per favore, consigliate come scrivere una funzione adeguata per chiudere un ordine dopo che sono state aperte alcune barre, e come ottimizzare questo numero.
File:
 

Prova con 2 nuove variabili:


extern bool IfTrueThenCountBarWork = false; // - se false, questa funzione non funziona, per funzionare è necessario impostare true.

extern inttern CountBar = 0; // - numero di barre dopo le quali chiudere. Ho descritto sopra come si contano le barre.


Spero di aver fatto qualcosa di utile.

File:
 
PODLIY16:

Prova con 2 nuove variabili:


extern bool IfTrueThenCountBarWork = false; // - se impostate false, questa funzione non funzionerà, dovete impostare true per farla funzionare.

extern int CountBar = 0; // - numero di barre dopo le quali chiudere. Come si contano le barre, l'ho scritto sopra.


Spero di avervi aiutato in qualche modo.




Grazie!