Sólo añadir que NO SE GARANTIZA que el terminal tenga y dé suficiente historial.
en el ejemplo anterior no hay ninguna referencia a la historia
por lo que se garantiza que el resultado de OrderSelect() es verdadero
UPD: OrderSelect en 4 funciona muy bien, lo probé una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente es millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero como dicen "todas las puntas son diferentes", me gusta - guardarlo
@Igor Makanu, muchas gracias por tus respuestas sobre la clasificación de las órdenes en el terminal. Probablemente los guarde como una matriz de estructuras y los clasifique yo mismo. Mis dudas se debían principalmente a que temía que esas acciones realizadas en cada tic tuvieran un impacto negativo notable en el rendimiento.
Janis Ozols: @Igor Makanu, muchas gracias por tus respuestas sobre la clasificación de las órdenes en el terminal. Probablemente los guarde como una matriz de estructuras y los clasifique yo mismo. Las dudas se debían principalmente a que temía que esas acciones realizadas en cada tic tuvieran un notable impacto negativo en el rendimiento.
Entonces, ¿por qué clasificar en cada garrapata? Suficiente sólo cuando el número de entradas cambia o la lista cambia completamente...
en el ejemplo anterior no hay ninguna referencia a la historia
por lo que se garantiza que el resultado de OrderSelect() es verdadero
UPD: OrderSelect en 4 funciona muy bien, lo estuve probando una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente son millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero es como dicen "todas las puntillas difieren", si te gusta, quédate con ella
El moderador Artem no discute. El moderador Artem está debatiendo :)
¿Por qué isCrossing() no devuelve 2? La propia isCrossing () tiene una segunda entrada if, pero entonces no hay ninguna entrada if en OnTick() cuando isCrossing() == 2. ¿Qué es esta tontería...
Sólo añadir que NO SE GARANTIZA que el terminal tenga y dé suficiente historial.
en el ejemplo anterior no hay ninguna referencia a la historia
por lo que se garantiza que el resultado de OrderSelect() es verdadero
UPD: OrderSelect en 4 funciona muy bien, lo probé una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente es millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero como dicen "todas las puntas son diferentes", me gusta - guardarlo
Hola, se necesitan datos sobre la detracción de cada operación.
¿Puede alguien conocer un script que recoja estas estadísticas y las presente en forma de informe?
Gracias
Hola, se necesitan datos sobre la detracción de cada operación.
¿Puede alguien conocer un script que recoja estas estadísticas y las presente en forma de informe?
Gracias
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
está "escrito a mano", sin probar, lleno de errores :-) sólo tienes que ajustarlo a tus necesidades y utilizarlo
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
escrito "a mano", no revisado, lleno de errores :-) ajústelo a sus necesidades y utilícelo
gracias, ¡intentaré averiguarlo!
@Igor Makanu, muchas gracias por tus respuestas sobre la clasificación de las órdenes en el terminal. Probablemente los guarde como una matriz de estructuras y los clasifique yo mismo. Las dudas se debían principalmente a que temía que esas acciones realizadas en cada tic tuvieran un notable impacto negativo en el rendimiento.
Entonces, ¿por qué clasificar en cada garrapata? Suficiente sólo cuando el número de entradas cambia o la lista cambia completamente...
en el ejemplo anterior no hay ninguna referencia a la historia
por lo que se garantiza que el resultado de OrderSelect() es verdadero
UPD: OrderSelect en 4 funciona muy bien, lo estuve probando una vez - para las órdenes de mercado el tiempo de acceso a las propiedades de la orden.... realmente son millones de veces por segundo, no quiero buscarlo, creo que estaba discutiendo con el moderador Artem, pero es como dicen "todas las puntillas difieren", si te gusta, quédate con ella