[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 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);
}



Esto es lo que 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: Aliados: GBPUSD // - en el bucle imprimir AliadosO[i].
22:05:25 RSI_Valut_Test2 EURUSD,H1: Aliados: GBPUSD
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemigo: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Enemigo: USDCHF
22:05:25 RSI_Valut_Test2 EURUSD,H1: Ticket USDCHF: -1

22:05:25 RSI_Valut_Test2: el nombre del símbolo de la función OrderSend debe ser una cadena


Bueno en general fulano, no puedo dar todo el código, ya que pidió no distribuir... Bueno, un par de impresoras fueron arrojadas allí, las cuales emiten estos datos... ¿Por qué dice que no es una cadena? ¿Si está declarada como una cadena?


Por favor, ayúdenme, gracias de antemano.

 

Buenas noches a todos. Por favor, aconseje cómo escribir una función adecuada para cerrar una orden después de que se hayan abierto algunas barras, y cómo optimizar este número.

 

CountBars - número de barras.

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


Se ejecuta en cada tick, no estoy seguro del número de barras, puede ser -1, o +1, porque no sé exactamente cómo se calcula el desplazamiento... Bueno, no es difícil comprobarlo en M1...

¿Es así?

 
PODLIY16:

CountBars - número de barras.

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


Se ejecuta en cada tick, no estoy seguro del número de barras, puede ser -1, o +1, porque no sé exactamente cómo se calcula el desplazamiento... Bueno, no es difícil de comprobar en M1...

¿Es eso?

 
isaev-av:

Supongo que sí, no soy programador, lo intentaré ahora, lo principal es que funcione en el 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);
}
}


Este es correcto, cierra la orden en cuanto se abre la barra correcta, por ejemplo en M1 lo acabo de probar, la orden se abrió en el minuto 9, se cerró a las 11:01.

 
¿Puedes decirme cómo superponer una MA a un indicador RSI o Estohástico, es decir, tomar la MA no de un gráfico sino de un indicador?
 
No funciona. Tal vez alguien pueda corregirlo. Buenas tardes a todos. Por favor, aconsejar cómo escribir una función adecuada para cerrar una orden después de unas pocas barras se abren y este número puede ser optimizado.
Archivos adjuntos:
 

Pruébalo con 2 nuevas variables:


extern bool IfTrueThenCountBarWork = false; // - si es false, esta función no funcionará, para que funcione es necesario poner true.

extern inttern CountBar = 0; // - número de barras después de las cuales cerrar. Más arriba he descrito cómo se cuentan las barras.


Espero haber hecho algo útil.

Archivos adjuntos:
 
PODLIY16:

Pruébalo con 2 nuevas variables:


extern bool IfTrueThenCountBarWork = false; // - si establece false, esta función no funcionará, debe establecer true para que funcione.

extern int CountBar = 0; // - número de barras después de las cuales cerrar. Cómo se cuentan las barras, lo escribí arriba.


Espero haberte ayudado de alguna manera.




Gracias.