[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 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);
}



Isto é o que ela produz:

22:05:25 RSI_Valut_Test2 EURUSD,H1: CountAlliesO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: CondeEnemyO: 2
22:05:25 RSI_Valut_Test2 EURUSD,H1: Aliados: GBPUSD // - no loop print AlliesO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1: Aliados: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: Inimigo: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Inimigo: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Bilhete USDCHF: -1

22:05:25 RSI_Valut_Test2: o nome do símbolo para a função OrderSend deve ser uma cadeia


Bem, em geral, não posso dar todo o código, como pediram para não distribuir... Um par de impressoras foram atiradas para lá, que emitem esses dados. Por que diz que não é um cordel? Se é declarado como um cordel?


Por favor, me ajude, obrigado de antemão.

 

Boa noite a todos. Por favor, informe como escrever uma função adequada para fechar um pedido após algumas barras terem sido abertas, e como otimizar este número.

 

CountBars - número de barras.

Bilhete - número de pedido.

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


Correr em cada tick, sem ter certeza do número de barras, pode ser -1, ou +1, porque não sei exatamente como o offset é calculado... Bem, não é difícil verificar no M1...

É assim?

 
PODLIY16:

CountBars - número de barras.

Bilhete - número de pedido.

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


Correr em cada tick, sem ter certeza do número de barras, pode ser -1, ou +1, porque não sei exatamente como o offset é calculado... Bem, não é difícil checar M1...

É isso?

 
isaev-av:

Acho que sim. Não sou um programador. Vou tentar agora. O principal é fazer com que funcione no 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);
}
}


Esta está correta, fecha o pedido assim que a barra direita abre, por exemplo na M1 acabei de experimentá-la, o pedido abriu no nono minuto, fechou às 11:01h.

 
Você pode me dizer como sobrepor um MA em um indicador RSI ou Stohastic, ou seja, tirar o MA não de um gráfico, mas de um indicador?
 
Não está funcionando. Talvez alguém possa corrigi-lo. Boa noite a todos. Favor aconselhar como escrever uma função adequada para fechar um pedido depois que algumas barras são abertas e este número pode ser otimizado.
Arquivos anexados:
 

Experimente-o com 2 novas variáveis:


bool externo IfTrueThenCountBarWork = falso; // - se falso, esta função não funcionará, para funcionar é necessário definir verdadeiro.

Barra de contagem externa interna = 0; // - número de barras após as quais fechar. Eu descrevi acima como as barras são contadas.


Espero ter feito algo útil.

Arquivos anexados:
 
PODLIY16:

Experimente-o com 2 novas variáveis:


bool externo IfTrueThenCountBarWork = falso; // - se você definir falso, esta função não funcionará, você deve definir verdadeiro para que ela funcione.

Exterior int Barra de contagem = 0; // - número de barras após as quais fechar. Como as barras são contadas, escrevi acima.


Espero tê-los ajudado de alguma forma.




Obrigado!
Razão: