Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
El código fuente está disponible aquí - http://forexsystems.ru/phpBB/viewtopic.php?p=4389#4389
Algunas cosas añadidas, otras corregidas...
//+------------------------------------------------------------------+ //| Redefine OrderClose() function | //+------------------------------------------------------------------+ bool funt_OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) { if (CorrectClosePrice(TradeOrdersArray[ticket,0],price,myCurrentTime))&&((TradeOrdersArray[ticket,3]=myOP_BUY)||(TradeOrdersArray[ticket,3]=myOP_BUY)) { ClosedOrdersArray[myHistoryTotal]=TradeOrdersArray[ticket,0];// записали иструмент ClosedOrdersArray[myHistoryTotal,1]=history_pool;// записали номер в истории ClosedOrdersArray[myHistoryTotal,2]=TradeOrdersArray[ticket,2];// записали номер тикета у брокера ClosedOrdersArray[myHistoryTotal,3]=TradeOrdersArray[ticket,3];// записали тип ордера ClosedOrdersArray[myHistoryTotal,4]=TradeOrdersArray[ticket,4];// записали размер ордера // ClosedOrdersArray[myHistoryTotal,4]=lots;//??? альтернативный вариант, надо доработать ClosedOrdersArray[myHistoryTotal,5]=TradeOrdersArray[ticket,5];// записали цену открытия ClosedOrdersArray[myHistoryTotal,6]=TradeOrdersArray[ticket,6];// записали проскальзывание в пунктах // ClosedOrdersArray[myHistoryTotal,6]=;slippage //??? альтернативный вариант, можно еще MathCeil (double (slippage*MathRand()/32767)) ClosedOrdersArray[myHistoryTotal,7]=TradeOrdersArray[ticket,7];// записали stoploss ClosedOrdersArray[myHistoryTotal,8]=TradeOrdersArray[ticket,8];// записали takeprofit ClosedOrdersArray[myHistoryTotal,9]=TradeOrdersArray[ticket,9];// записали комментарии ClosedOrdersArray[myHistoryTotal,10]=TradeOrdersArray[ticket,10];// записали MagicNumber ClosedOrdersArray[myHistoryTotal,11]=TradeOrdersArray[ticket,11];// записали дату открытия ордера ClosedOrdersArray[myHistoryTotal,12]=myCurrentTime;// записали дату закрытия ордера ClosedOrdersArray[myHistoryTotal,13]=myCurrentPrice(TradeOrdersArray[ticket,3]);// записали дату закрытия ордера ClosedOrdersArray[myHistoryTotal,14]=TradeOrdersArray[ticket,14];// записали профит по закрытому ордеру //------------------------------------------------------------------------------- // здесь блок по удалению ордера из массива TradeOrdersArray[][] myOrdersTotal--;// уменьшили счетчик открытых ордеров pool_pos--;// уменьшили счетчик в списке терминала //------------------------------------------------------------------------------- DrawCloseArrowOnChart(TradeOrdersArray[ticket,0],myCurrentTime,price,Color); DeltaBalance=DeltaBalance+ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени баланса на текущем баре DeltaProfit=DeltaProfit-ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени профита на текущем баре myHistoryTotal++; return(true); } else return(false); }No me falta mi ...
Lo siento, rara vez encuentro tiempo para mirar el foro - carga de trabajo muy pesada.
En cuanto la presión desaparezca tras el lanzamiento de MT4, retomaremos las conversaciones.
error - borrar una orden no es suficiente para hacer
myOrdersTotal--;// уменьшили счетчик открытых ордеров pool_pos--;// уменьшили счетчик в списке терминалаRenat,
BIEN.
En cuanto a la idea, deberíamos organizar un bucle para mover las órdenes al principio del array y, probablemente, ArrayResize(). Si fuera Collections como en Pascal, todo esto se haría con una sola operación. ¿Quizás haya alguien que quiera hacerlo?
Es rápido y fácil...
No tienes que escribirlas tú mismo.
¿Qué tal si no se borran los pedidos, sino que se marca la casilla de que se han borrado?
//+------------------------------------------------------------------+ //| Redefine OrderClose() function | //+------------------------------------------------------------------+ bool funt_OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) { int i,k,pointer_pool; if (CorrectClosePrice(TradeOrdersArray[ticket,0],price,myCurrentTime))&&((TradeOrdersArray[ticket,3]=myOP_BUY)||(TradeOrdersArray[ticket,3]=myOP_BUY)) { ClosedOrdersArray[myHistoryTotal]=TradeOrdersArray[ticket,0];// записали иструмент ClosedOrdersArray[myHistoryTotal,1]=history_pool;// записали номер в истории ClosedOrdersArray[myHistoryTotal,2]=TradeOrdersArray[ticket,2];// записали номер тикета у брокера ClosedOrdersArray[myHistoryTotal,3]=TradeOrdersArray[ticket,3];// записали тип ордера ClosedOrdersArray[myHistoryTotal,4]=TradeOrdersArray[ticket,4];// записали размер ордера // ClosedOrdersArray[myHistoryTotal,4]=lots;//??? альтернативный вариант, надо доработать ClosedOrdersArray[myHistoryTotal,5]=TradeOrdersArray[ticket,5];// записали цену открытия ClosedOrdersArray[myHistoryTotal,6]=TradeOrdersArray[ticket,6];// записали проскальзывание в пунктах // ClosedOrdersArray[myHistoryTotal,6]=;slippage //??? альтернативный вариант, можно еще MathCeil (double (slippage*MathRand()/32767)) ClosedOrdersArray[myHistoryTotal,7]=TradeOrdersArray[ticket,7];// записали stoploss ClosedOrdersArray[myHistoryTotal,8]=TradeOrdersArray[ticket,8];// записали takeprofit ClosedOrdersArray[myHistoryTotal,9]=TradeOrdersArray[ticket,9];// записали комментарии ClosedOrdersArray[myHistoryTotal,10]=TradeOrdersArray[ticket,10];// записали MagicNumber ClosedOrdersArray[myHistoryTotal,11]=TradeOrdersArray[ticket,11];// записали дату открытия ордера ClosedOrdersArray[myHistoryTotal,12]=myCurrentTime;// записали дату закрытия ордера ClosedOrdersArray[myHistoryTotal,13]=myCurrentPrice(TradeOrdersArray[ticket,3]);// записали дату закрытия ордера ClosedOrdersArray[myHistoryTotal,14]=TradeOrdersArray[ticket,14];// записали профит по закрытому ордеру //------------------------------------------------------------------------------- // здесь блок по удалению ордера из массива TradeOrdersArray[][] i=0; while (!TradeOrdersArray[i,1]==ticket) {i++}; pointer_pool=i; // нашли ордер по списку терминала for (i=pointer_pool;i<=pool_pos;i++) // перемещение ордеров от конца к удаляемому ордеру (фактически мы его стираем) { for (k=0;k<=14;k++) {TradeOrdersArray[i,k]=TradeOrdersArray[i+1,k]}// копирование параметров ордера } for (k=0;k<=14;k++) { TradeOrdersArray[myOrdersTotal,k]=NULL; // скорее всего некорректное "зануление" } myOrdersTotal--;// уменьшили счетчик открытых ордеров pool_pos--;// уменьшили счетчик в списке терминала // ArrayResize(TradeOrdersArray,pool_pos) ; // не неуверен, что эта процедура не приведет к краху массива //------------------------------------------------------------------------------- DrawCloseArrowOnChart(TradeOrdersArray[ticket,0],myCurrentTime,price,Color); DeltaBalance=DeltaBalance+ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени баланса на текущем баре DeltaProfit=DeltaProfit-ClosedOrdersArray[myHistoryTotal,14];// накапливаем изменени профита на текущем баре myHistoryTotal++; return(true); } else return(false); }En principio, la función DeleteOrder() puede derivarse de aquí. El número de errores se acumula...
El código fuente está en el mismo sitio - http://forexsystems.ru/phpBB/viewtopic.php?p=4574#4574
El autor quiere agradecer a todos su ayuda en la redacción de este chascarrillo... :)