Utilizo varias funciones definidas por el usuario en mi Asesor Experto. ¿Cómo puedo hacer que estas funciones se combinan en una biblioteca, y en el cuerpo del Asesor de Expertos sólo los llaman desde allí.
No estoy familiarizado con la sintaxis del lenguaje en este sentido.
Consulte la documentación o la sección de tutoriales. No lo he encontrado allí.
Cómo escribir una función que compruebe si una posición es o ha sido abierta en barra cero (preferiblemente una elección de marco de tiempo. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), o esta función lo hace. Según entendí, sólo abrirá posiciones en el momento, pero si estaba abierta y ya se cerró, devolverá -1.
//+----------------------------------------------------------------------------+ //| Devuelve el número de barra de la última posición abierta o -1. | //| Parámetros: | //| sym - nombre del instrumento ("" - símbolo actual) | //| tf - timeframe ( 0 - timeframe actual) | //| op - operación (-1 - cualquier posición) | //| mn - MagicNumber (-1 - cualquier magik) | //+----------------------------------------------------------------------------+ int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal();
Necesitamos dos ciclos. En el primero recorremos el historial de pedidos, en el segundo recorremos los pedidos actuales. En ambos casos, si la hora de apertura de la orden es mayor o igual a Time[0], entonces la orden se abrió en la vela actual. Esto es válido para todos los plazos.
drknn>>: Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Gracias por hacer clic. Podría pedir esto en el código
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
O aquí hay una función que comprueba si se abrió una posición en la barra actual (con una comprobación en OrdersTotal() y OrdersHistoryTotal() ). Devuelve true si se ha abierto una orden de tipo.
bool CheckExists(int Type)
{
bool Result = True;
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS))
if(OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
if(OrderOpenTime() >= Time[0])
Result = False;
for(i = 0; i < OrdersHistoryTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if(OrderType() == Type && OrderOpenTime() >= Time[0]
&& OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
Result = False;
}
return(Result);
}
Otra pregunta de un principiante.
Utilizo varias funciones definidas por el usuario en mi Asesor Experto. ¿Cómo puedo hacer que estas funciones se combinan en una biblioteca, y en el cuerpo del Asesor de Expertos sólo los llaman desde allí.
No estoy familiarizado con la sintaxis del lenguaje en este sentido.
Consulte la documentación o la sección de tutoriales. No lo he encontrado allí.
https://book.mql4.com/ru/build/structure
https://www.mql5.com/ru/articles/1462
+ para rematar... https://book.mql4.com/ru/appendix/examples
Cómo escribir una función que compruebe si una posición es o ha sido abierta en barra cero (preferiblemente una elección de marco de tiempo. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn=-1), o esta función lo hace. Según entendí, sólo abrirá posiciones en el momento, pero si estaba abierta y ya se cerró, devolverá -1.
//+----------------------------------------------------------------------------+
//| Devuelve el número de barra de la última posición abierta o -1. |
//| Parámetros: |
//| sym - nombre del instrumento ("" - símbolo actual) |
//| tf - timeframe ( 0 - timeframe actual) |
//| op - operación (-1 - cualquier posición) |
//| mn - MagicNumber (-1 - cualquier magik) |
//+----------------------------------------------------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
datetime oot;
int i, k=OrdersTotal();
if(sym=="")
sym=Symbol();
for(i=0; ik; i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==mn)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+----------------------------------------------------------------------------+
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.
Gracias por hacer clic. Podría pedir esto en el código
Спадибо, что аткликнулся. А можно попросить это в коде
Este es un ejemplo de un pasaje de la historia
Intenta idear tu propio código, sobre todo porque tienes el algoritmo y un ejemplo preparado delante de ti.
ObjectDelete(a_nombre_0);
ObjectCreate(a_nombre_0, OBJ_ARROW, a_window_8, a_datetime_12, a_price_20);
ObjectSet(a_nombre_0, OBJPROP_ARROWCODE, ai_28);
ObjectSet(a_nombre_0, OBJPROP_COLOR, a_color_32);
ObjectSet(a_nombre_0, OBJPROP_WIDTH, a_width_36);
}
void _setabuy(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Oferta + 15,0 * Punto, SYMBOL_ARROWUP, Azul, 2);
gi_120++;
}
void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Point, SYMBOL_ARROWDOWN, Red, 2);
gi_120++;
}
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
Gracias. Lo intentaré.
Вот пример прохода по истории
Попробуйте самостоятельно придумать код, тем более, что алгоритм и готовый пример у Вас перед глазами.
O aquí hay una función que comprueba si se abrió una posición en la barra actual (con una comprobación en OrdersTotal() y OrdersHistoryTotal() ). Devuelve true si se ha abierto una orden de tipo.
Por favor, dígame cómo implementar la condición.
Si (hay órdenes pendientes) entonces haz esto y aquello;