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
몇 가지를 추가하고 몇 가지를 수정했습니다 ...
내... 잃지 않을거야...
죄송합니다. 작업량이 매우 많아서 포럼을 볼 시간이 거의 없습니다.
MT4 출시 이후 어떻게 긴장을 풀 것인가 - 추후 논의를 통해 다룰 예정이다.
오류 - 주문을 삭제하는 것만으로는 충분하지 않습니다.
레나트,
확인.
아이디어에 따르면 배열의 시작 부분과 ArrayResize() 로 주문을 이동하는 주기를 구성해야 합니다. 이것이 Pascal에서와 같이 컬렉션이라면 이 모든 작업은 한 명의 연산자에 의해 수행되지만 여기에서는 시도해야 합니다. 싶은 분들이 있지 않을까요?
그들과 함께 모든 것이 빠르고 쉽습니다..
직접 작성하지 마십시오.
아니면 주문을 삭제하지 않고 삭제되었다는 확인란을 선택하시겠습니까?
원칙적으로 DeleteOrder() 함수는 여기에서 파생될 수 있습니다. 오류가 쌓여가고..
소스는 같은 위치에 있습니다 - http://forexsystems.ru/phpBB/viewtopic.php?p=4574#4574
저자는 이 문제를 작성하는 데 도움을 준 모든 사람에게 깊은 감사를 표합니다... :)