Filtro What If por mes
4 respuestas
Mark Fric
hace 9 años #112399
Estoy publicando un código de ejemplo que añade una nueva condición What If que permite filtrar por mes.
Simplemente abra QuantEditor, cree un nuevo archivo What If y copie el contenido allí:
import java.util.ArrayList; importar java.util.Iterator; import com.sonarbytes.eaa.logic.whatif.WhatIf; import com.sonarbytes.strategy.Order; import com.sonarbytes.strategy.StrategyStatsData; import com.sonarbytes.windows.panels.propertyPanel.CComboBoxItemList; import com.sonarbytes.utils.SQTime; public class ByMonth extends WhatIf { public ByMonth() { setName("Por mes"); addIntParameter("_JAN_", "Enero", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_FEB_", "Febrero", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAR_", "Marzo", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_APR_", "Abril", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_MAY_", "Mayo", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUN_", "Jun", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_JUL_", "Julio", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_AUG_", "Agosto", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_SEP_", "Septiembre", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_OCT_", "Octubre", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_NOV_", "Noviembre", 1, 1, Integer.MAX_VALUE, 1); addIntParameter("_DEC_", "Diciembre", 1, 1, Integer.MAX_VALUE, 1); // establecer el nombre de este método que se mostrará con los parámetros setFormatedName("Por mes"); } /** * La función recibe la lista de todos los pedidos ordenados por tiempo de apertura y puede manipular * la lista y eliminar cualquier orden que coincida con cierto filtro de la lista. * * * Estructura del pedido: * .ticket - ticket de pedido (número entero) * .size - tamaño del pedido * .type - tipo de orden: 1 - operación larga, 2 - operación corta * .pl - operación resultante Profit/Loss en $ * .pctPL - operación resultante Profit/Loss en % * .pipsPL - operación resultante Profit/Loss en pips * .openPrice - precio de apertura de una orden * .openTime - hora de apertura de una orden (en segundos desde 1.1.1970) * .stoploss - nivel de stop loss fijado en la operación * .takeprofit - nivel de beneficio objetivo fijado en la operación * .closePrice - precio de cierre de una orden * .closeTime - hora de cierre de una orden (en segundos desde 1.1.1970) * .closeType - tipo de cierre * .DD - reducción durante esta operación en $ * .pctDD - reducción durante esta operación en % * .pipsDD - reducción durante esta operación en pips * .accountBalance - saldo de la cuenta durante esta operación * .symbol - símbolo del instrumento (por ejemplo "EURUSD") * * @param originalOrders - lista de órdenes originales que pueden ser modificadas. Cada orden tiene las propiedades especificadas anteriormente */ @Override public void filter(ArrayList pedidosoriginales) { int enero = getIntParameterValue("_ENERO_"); int feb = getIntParameterValue("_FEB_"); int mar = getIntParameterValue("_MAR_"); int abr = getIntParameterValue("_APR_"); int may = getIntParameterValue("_MAY_"); int jun = getIntParameterValue("_JUN_"); int jul = getIntParameterValue("_JUL_"); int aug = getIntParameterValue("_AUG_"); int sep = getIntParameterValue("_SEP_"); int oct = getIntParameterValue("_OCT_"); int nov = getIntParameterValue("_NOV_"); int dec = getIntParameterValue("_DEC_"); for(Iterator i = originalOrders.listIterator(); i.hasNext() ;) { Orden = (Orden)i.next(); SQTime time = new SQTime(orden.openTime); int ordenMes = time.getMonth(); if(orderMonth == 0 && jan != 1) i.remove(); if(orderMonth == 1 && feb != 1) i.remove(); if(mespedido == 2 && mar != 1) i.remove(); if(mespedido == 3 && abr != 1) i.remove(); if(mespedido == 4 && mayo != 1) i.remove(); if(mespedido == 5 && jun != 1) i.remove(); if(mespedido == 6 && jul != 1) i.remove(); if(mespedido == 7 && ago != 1) i.remove(); if(mespedido == 8 && sep != 1) i.remove(); if(mespedido == 9 && oct != 1) i.remove(); if(mespedido == 10 && nov != 1) i.remove(); if(orderMonth == 11 && dec != 1) i.remove(); } } }
Mark
Arquitecto de StrategyQuant
ynachum
hace 9 años #126924
Mark Fric
hace 9 años #126949
Puede ver el código de todas las opciones What-if ya utilizadas en el programa, sólo tiene que abrir el QuantEditor en EA Analyzer.
Mark
Arquitecto de StrategyQuant
ForexTrader
hace 9 años #127435
Tengo este error Mark:
La clase ByMonth es pública, debe ser declarada en un archivo llamado ByMonth.java
Mark Fric
hace 9 años #127441
Si, no se donde lo creaste, pero deberias crear un archivo llamado ByMonth.java en QuantEditor y poner este codigo ahi.
El nombre del archivo debe coincidir con el nombre de la clase.
Mark
Arquitecto de StrategyQuant
Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)