문자열 기호, int cmd, 이중 볼륨, 이중 가격, int 슬리피지, 이중 손절매, 이중 이익 실현, 문자열 주석=NULL, int magic=0, datetime 만료=0, color arrow_color=CLR_NONE)
포지션을 열거나 보류 주문을 하는 데 사용되는 주요 기능입니다. 거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패하면 -1을 반환합니다. 추가 오류 정보를 얻으려면 GetLastError() 함수를 호출해야 합니다. 노트: 시장가 주문(OP_SELL 또는 OP_BUY) 개시 시 Bid (매도) 또는 Ask (매수)의 최신 가격만 Open Price로 사용할 수 있습니다. 현재와 다른 보안으로 작업을 수행하는 경우 이 보안에 대한 최신 시세를 얻으려면 MarketInfo() 함수를 MODE_BID 또는 MODE_ASK 매개변수와 함께 사용해야 합니다. 계산되거나 정규화되지 않은 가격은 적용할 수 없습니다. 가격 스레드에 요청한 공개 가격이 없거나 소수점 이하 자릿수 에 따라 정규화되지 않은 경우 오류 129(ERR_INVALID_PRICE)가 생성됩니다. 요청한 시가가 완전히 오래된 경우 오류 138( ERR_REQUOTE )이 슬리피지 매개변수에 독립적으로 생성됩니다. 요청한 가격이 구식이지만 스레드에 있는 경우 현재 가격이 가격 +- 슬리피지 범위 내에 있는 경우에만 현재 가격으로 포지션이 열립니다.
StopLoss 및 TakeProfit 수준은 시장에 너무 가깝지 않아야 합니다. MODE_STOPLEVEL 매개변수와 함께 MarketInfo () 함수를 사용하여 정지 레벨의 최소 거리는 포인트 단위로 얻을 수 있습니다. 잘못되었거나 정규화되지 않은 정지 수준의 경우 오류 130(ERR_INVALID_STOPS)이 생성됩니다.
보류 주문을 할 때 공개 가격은 시장에 너무 가깝지 않아야 합니다. MODE_STOPLEVEL 매개변수와 함께 MarketInfo() 함수를 사용하여 현재 시장에서 1포인트로 보류 중인 가격의 최소 거리를 얻을 수 있습니다. 보류 중인 주문의 오픈 가격이 잘못된 경우 130 오류 (ERR_INVALID_STOPS)가 생성됩니다.
일부 거래 서버에서는 보류 주문 만료 시간 적용을 비활성화할 수 있습니다. 이 경우 만료 매개변수에 0이 아닌 값을 지정하면 오류 147(ERR_TRADE_EXPIRATION_DENIED)이 생성됩니다.
일부 거래 서버에서는 미결 및 보류 주문의 총량 이 제한될 수 있습니다. 이 한도를 초과하면 새 포지션이 열리지 않고(또는 보류 중인 주문이 배치되지 않음) 거래 서버는 오류 148(ERR_TRADE_TOO_MANY_ORDERS)을 반환합니다.
거래 서버가 주문에 할당한 티켓 번호를 반환하거나 실패하면 -1을 반환합니다. 추가 오류 정보를 얻으려면 GetLastError() 함수를 호출해야 합니다.
노트:
시장가 주문(OP_SELL 또는 OP_BUY) 개시 시 Bid (매도) 또는 Ask (매수)의 최신 가격만 Open Price로 사용할 수 있습니다. 현재와 다른 보안으로 작업을 수행하는 경우 이 보안에 대한 최신 시세를 얻으려면 MarketInfo() 함수를 MODE_BID 또는 MODE_ASK 매개변수와 함께 사용해야 합니다. 계산되거나 정규화되지 않은 가격은 적용할 수 없습니다. 가격 스레드에 요청한 공개 가격이 없거나 소수점 이하 자릿수 에 따라 정규화되지 않은 경우 오류 129(ERR_INVALID_PRICE)가 생성됩니다. 요청한 시가가 완전히 오래된 경우 오류 138( ERR_REQUOTE )이 슬리피지 매개변수에 독립적으로 생성됩니다. 요청한 가격이 구식이지만 스레드에 있는 경우 현재 가격이 가격 +- 슬리피지 범위 내에 있는 경우에만 현재 가격으로 포지션이 열립니다.
StopLoss 및 TakeProfit 수준은 시장에 너무 가깝지 않아야 합니다. MODE_STOPLEVEL 매개변수와 함께 MarketInfo () 함수를 사용하여 정지 레벨의 최소 거리는 포인트 단위로 얻을 수 있습니다. 잘못되었거나 정규화되지 않은 정지 수준의 경우 오류 130(ERR_INVALID_STOPS)이 생성됩니다.
보류 주문을 할 때 공개 가격은 시장에 너무 가깝지 않아야 합니다. MODE_STOPLEVEL 매개변수와 함께 MarketInfo() 함수를 사용하여 현재 시장에서 1포인트로 보류 중인 가격의 최소 거리를 얻을 수 있습니다. 보류 중인 주문의 오픈 가격이 잘못된 경우 130 오류 (ERR_INVALID_STOPS)가 생성됩니다.
일부 거래 서버에서는 보류 주문 만료 시간 적용을 비활성화할 수 있습니다. 이 경우 만료 매개변수에 0이 아닌 값을 지정하면 오류 147(ERR_TRADE_EXPIRATION_DENIED)이 생성됩니다.
일부 거래 서버에서는 미결 및 보류 주문의 총량 이 제한될 수 있습니다. 이 한도를 초과하면 새 포지션이 열리지 않고(또는 보류 중인 주문이 배치되지 않음) 거래 서버는 오류 148(ERR_TRADE_TOO_MANY_ORDERS)을 반환합니다.
//--- 입력 매개변수
외부 정수 기간 = 16;
외부 정수 임계값=50;
외부 이중 로트=1;
외부 정수 k=5000;
extern bool pl=true;
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
double bs=NormalizeDouble(iCustom(Symbol(),0,"Aver", 마침표,0,0),자리수);
이중 ss=NormalizeDouble(iCustom(Symbol(),0,"Aver", 마침표,1,0),자리수);
이중 tpb=NormalizeDouble(bs+(bs-ss),숫자);
이중 tps=NormalizeDouble(ss-(bs-ss), 숫자);
if(pl==true) 이중 랏=MathMin(AccountFreeMargin()/k,5);
if(pl==false)lots=lot;
if(OrdersTotal()==0)
{
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);//구매 지연기를 엽니다.
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);//판매 지연을 엽니다.
}
if(주문 총계()==2)
{
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);//가장 가까운 주문을 선택합니다.
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,빨간색);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,빨간색);
주문 선택(1,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUYSTOP &&bs<OrderOpenPrice())OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
if(OrderType()==OP_SELLSTOP&&ss>OrderOpenPrice())OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
if(OrderType()==OP_BUY &&ss>OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,빨간색);
if(OrderType()==OP_SELL&&bs<OrderStopLoss())OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,빨간색);
}
if(OrdersTotal()==1)
{
주문 선택(0,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY) {OrderModify(OrderTicket(),OrderOpenPrice(),ss,OrderTakeProfit(),0,빨간색);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELL) {OrderModify(OrderTicket(),OrderOpenPrice(),bs,OrderTakeProfit(),0,빨간색);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);}
if(OrderType()==OP_BUYSTOP) {OrderModify(OrderTicket(),bs,ss,tpb,0,Red);
OrderSend(Symbol(),OP_SELLSTOP,lots,ss,3,bs,tps,"",1394,0,Blue);}
if(OrderType()==OP_SELLSTOP){OrderModify(OrderTicket(),ss,bs,tps,0,Blue);
OrderSend(Symbol(),OP_BUYSTOP,lots,bs,3,ss,tpb,"",1394,0,Red);}
}
리턴(0);
}
//+----------------------------------------------- --------------------+