Mak, 나는 주문을 삭제하는 것이 "불완전"하다는 것을 알고 처음에는 카운터를 줄이고 싶지도 않았지만 두 줄을 삽입하는 것이 그렇게 어렵지 않다고 생각했습니다. 아이디어에 따르면 배열의 시작 부분과 ArrayResize() 로 주문을 이동하는 주기를 구성해야 합니다. 이것이 Pascal에서와 같이 컬렉션이라면 이 모든 작업은 한 명의 연산자에 의해 수행되지만 여기에서는 시도해야 합니다. 싶은 분들이 있지 않을까요?
//+------------------------------------------------------------------+
//| 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);
}
원칙적으로 DeleteOrder() 함수는 여기에서 파생될 수 있습니다. 오류가 쌓여가고..
출처는 여기 - http://forexsystems.ru/phpBB/viewtopic.php?p=4389#4389
몇 가지를 추가하고 몇 가지를 수정했습니다 ...
//+------------------------------------------------------------------+ //| 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); }내... 잃지 않을거야...
죄송합니다. 작업량이 매우 많아서 포럼을 볼 시간이 거의 없습니다.
MT4 출시 이후 어떻게 긴장을 풀 것인가 - 추후 논의를 통해 다룰 예정이다.
오류 - 주문을 삭제하는 것만으로는 충분하지 않습니다.
myOrdersTotal--;// уменьшили счетчик открытых ордеров pool_pos--;// уменьшили счетчик в списке терминала레나트,
확인.
아이디어에 따르면 배열의 시작 부분과 ArrayResize() 로 주문을 이동하는 주기를 구성해야 합니다. 이것이 Pascal에서와 같이 컬렉션이라면 이 모든 작업은 한 명의 연산자에 의해 수행되지만 여기에서는 시도해야 합니다. 싶은 분들이 있지 않을까요?
그들과 함께 모든 것이 빠르고 쉽습니다..
직접 작성하지 마십시오.
아니면 주문을 삭제하지 않고 삭제되었다는 확인란을 선택하시겠습니까?
//+------------------------------------------------------------------+ //| 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); }원칙적으로 DeleteOrder() 함수는 여기에서 파생될 수 있습니다. 오류가 쌓여가고..
소스는 같은 위치에 있습니다 - http://forexsystems.ru/phpBB/viewtopic.php?p=4574#4574
저자는 이 문제를 작성하는 데 도움을 준 모든 사람에게 깊은 감사를 표합니다... :)