하지만 실제로는 교과서부터 시작해야 하고... :) 아니면 메타에디터에서 최소한 F1을 사용하거나
정수 주문 유형 (
)
현재 선택한 주문의 작업 유형을 반환합니다. 다음 값 중 하나일 수 있습니다. OP_BUY - 매수 포지션, OP_SELL - 포지션 매도, OP_BUYLIMIT - 지정된 수준에 도달하면 구매 보류 중인 주문, 현재 가격이 수준 이상인 경우 OP_BUYSTOP - 지정된 수준에 도달하면 구매 대기 중인 주문, 현재 가격이 수준보다 낮음, OP_SELLLIMIT - 지정된 수준에 도달하면 보류 중인 판매 주문, 현재 가격이 수준보다 낮음, OP_SELLSTOP - 지정된 수준에 도달했을 때 판매 대기 중인 주문, 현재 가격이 수준 이상입니다. OrderSelect() 함수를 사용하여 주문을 미리 선택해야 합니다.
예시:
정수 주문 유형;
if(주문 선택(12, SELECT_BY_POS)==true)
{
order_type=주문 유형();
// ...
}
또 다른
Print("OrderSelect()가 오류를 반환했습니다 - ",GetLastError());
extern double Lot=0.01; // Жестко заданное колич. лотов datetime time; //--------------------------------------------------------------- 2 -- int start() { int Total;
bool Ans =false, // Ответ сервера после закрытия Cls_B=false, // Критерий для закрытия Buy Cls_S=false, // Критерий для закрытия Sell Opn_B=false, // Критерий для открытия Buy Opn_S=false; // Критерий для открытия Sell
미결 주문 유형을 결정하는 방법은 무엇입니까?
주문 유형()
하지만 실제로는 교과서부터 시작해야 하고... :) 아니면 메타에디터에서 최소한 F1을 사용하거나
OP_BUY - 매수 포지션,
OP_SELL - 포지션 매도,
OP_BUYLIMIT - 지정된 수준에 도달하면 구매 보류 중인 주문, 현재 가격이 수준 이상인 경우
OP_BUYSTOP - 지정된 수준에 도달하면 구매 대기 중인 주문, 현재 가격이 수준보다 낮음,
OP_SELLLIMIT - 지정된 수준에 도달하면 보류 중인 판매 주문, 현재 가격이 수준보다 낮음,
OP_SELLSTOP - 지정된 수준에 도달했을 때 판매 대기 중인 주문, 현재 가격이 수준 이상입니다.
OrderSelect() 함수를 사용하여 주문을 미리 선택해야 합니다.
부동 소수점 값은 double 유형의 실수입니다.
그리고 숫자 대신 int 유형의 변수를 사용하십시오.
예를 들어 int dg= MarketInfo ( Symbol () , MODE_DIGITS);
datetime time;
//--------------------------------------------------------------- 2 --
int start()
{
int Total;
bool
Ans =false, // Ответ сервера после закрытия
Cls_B=false, // Критерий для закрытия Buy
Cls_S=false, // Критерий для закрытия Sell
Opn_B=false, // Критерий для открытия Buy
Opn_S=false; // Критерий для открытия Sell
//--------------------------------------------------------------- 3 --
// Учёт ордеров
for(int i=OrdersTotal()-1;i>=0;i--)
if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()>1)Total++;
if(Total!=0 || time==Time[1])return;
static int KolBars;
if (Close[0]-Open[0] > Point && Close[1]-Open[1] > Point && Bars == KolBars)
{
KolBars=Bars ; // запоминаем кол-во бар при которых совершались действия
}
// Торговые критерии
// Критерий откр. Buy
Opn_B=true;
//--------------------------------------------------------------- 7 --
if (Opn_B)
{OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0);time=Time[1];}
}
도와주세요 3회째 부탁드립니다. 새 양초가 나타날 때 매수 위치를 열고(이전 2개의 양초가 녹색인 경우), 해당 위치가 열린 양초가 닫힐 때 또는 다음 양초가 닫힐 때 위치를 닫는 기본 고문.
위에서 볼 수 있는 것은 새 양초가 나타날 때마다 시작 기준에 반응하지 않고 포지션을 엽니다. 저는 포지션을 닫는 방법을 알지 못했습니다. 교과서나 포럼에서 찾지 못했습니다.
부동 소수점 값은 double 유형의 실수입니다.
그리고 숫자 대신 int 유형의 변수를 사용하십시오.
예를 들어 int dg= MarketInfo ( Symbol () , MODE_DIGITS);
그들은 나에게 이렇게 썼습니다. "정규화(NormalizeDouble()), 최대/최소 로트에 대한 제한이 5자리인 경우 확인하십시오. 정지 및 이익을 10배 늘리십시오."
문서에는 "부동 소수점 숫자를 지정된 정확도로 반올림합니다. StopLoss, TakeProfit의 계산된 값 및 보류 중인 주문의 시작 가격 값은 정확도로 정규화되어야 합니다. 사전 정의된 변수 Digits 에 저장됩니다."
교과서에서 못찾았 는데 NormalizeDouble을 통해 현 가격, StopLoss, TakeProfit을 정상화 해야 하는 건가요 ---? 그렇다면 정확히 어떻게?
이중 값 -- 대신 예를 들어 상금을 넣을 수 있습니다.
int 숫자 -- 여기에서 dg 변수는 MarketInfo ( Symbol () , MODE_DIGITS)와 같습니다. ???
그들은 저에게 이렇게 썼습니다. "정상화(NormalizeDouble()), 최대/최소 로트에 대한 제한을 확인하십시오. 5개 표시이면 정지 및 이익을 10배로 늘리십시오."
문서에는 "부동 소수점 숫자를 지정된 정확도로 반올림합니다. StopLoss, TakeProfit의 계산된 값 및 보류 중인 주문의 시작 가격 값은 정확도로 정규화되어야 합니다. 사전 정의된 변수 Digits 에 저장됩니다."
교과서에서 못찾았 는데 NormalizeDouble을 통해 현 가격, StopLoss, TakeProfit을 정상화 해야 하는 건가요 ---? 그렇다면 정확히 어떻게?
이중 값 -- 대신 예를 들어 상금을 넣을 수 있습니다.
int 숫자 -- 여기서 MarketInfo ( Symbol () , MODE_DIGITS) 와 같은 변수 dg; ???
정수 손절매 = 50; // StopLoss(포인트)
정수 TakeProfit=150; // TakeProfit(포인트)
정수 SetOrderDistance=50; // 포인트로 보류 주문을 하기 위한 거리
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------
int pt=MarketInfo(Symbol(), MODE_POINT); // 견적 통화의 포인트 크기
int dg=MarketInfo(Symbol(),MODE_DIGITS); // 상품 가격의 소수점 이하 자릿수
int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL); // 최소 허용 손절매/포인트 단위 이익 수준
이중 pa=MarketInfo(Symbol(), MODE_ASK); // 가격 물어보기
이중 pb=MarketInfo(Symbol(), MODE_BID); // 입찰 가격
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------
더블 slB=NormalizeDouble(pa-StopLoss*pt, dg); // 매수 포지션에 대한 StopLoss 가격 수준의 정규화
이중 tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // 매수 포지션에 대한 TakeProfit 가격 수준의 정규화
더블 slS=NormalizeDouble(pb+StopLoss*pt, dg); // Sell 포지션에 대한 StopLoss 가격 수준의 정규화
이중 tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // Sell 포지션에 대한 TakeProfit 가격 수준의 정규화
더블 SetB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // 보류 중인 구매 주문을 하는 가격의 정규화
이중 SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // 보류 중인 판매 주문 가격의 정규화
이중 slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // 보류 중인 매수 주문의 StopLoss 가격 수준 정규화
이중 tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // 보류 중인 구매 주문의 TakeProfit 가격 수준 정규화
더블 slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // 보류 중인 판매 주문의 StopLoss 가격 수준 정규화
이중 tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // 보류 중인 판매 주문의 TakeProfit 가격 수준 정규화
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------
이해하다... :)
그리고 StopLevel의 존재를 잊지 마십시오. - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);
이 값보다 작지 않도록 정류장 및 테이크를 배치하기 위한 최소 거리를 확인합니다.
정수 손절매 = 50; // StopLoss(포인트)
정수 TakeProfit=150; // TakeProfit(포인트)
정수 SetOrderDistance=50; // 포인트로 보류 주문을 하기 위한 거리
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------
int pt=MarketInfo(Symbol(), MODE_POINT); // 견적 통화의 포인트 크기
int dg=MarketInfo(Symbol(),MODE_DIGITS); // 상품 가격의 소수점 이하 자릿수
int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL); // 최소 허용 손절매/포인트 단위 이익 수준
이중 pa=MarketInfo(Symbol(), MODE_ASK); // 가격 물어보기
이중 pb=MarketInfo(Symbol(), MODE_BID); // 입찰 가격
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------
더블 slB=NormalizeDouble(pa-StopLoss*pt, dg); // 매수 포지션에 대한 StopLoss 가격 수준의 정규화
이중 tpB=NormalizeDouble(pa+TakeProfit*pt, dg); // 매수 포지션에 대한 TakeProfit 가격 수준의 정규화
더블 slS=NormalizeDouble(pb+StopLoss*pt, dg); // Sell 포지션에 대한 StopLoss 가격 수준의 정규화
이중 tpS=NormalizeDouble(pb-TakeProfit*pt, dg); // Sell 포지션에 대한 TakeProfit 가격 수준의 정규화
더블 SetB=NormalizeDouble(pa+SetOrderDistance*pt, dg); // 보류 중인 구매 주문을 하는 가격의 정규화
이중 SetS=NormalizeDouble(pb-SetOrderDistance*pt, dg); // 보류 중인 판매 주문 가격의 정규화
이중 slBS=NormalizeDouble(SetB-StopLoss*pt, dg); // 보류 중인 매수 주문의 StopLoss 가격 수준 정규화
이중 tpBS=NormalizeDouble(SetB+TakeProfit*pt, dg); // 보류 중인 구매 주문의 TakeProfit 가격 수준 정규화
더블 slSS=NormalizeDouble(SetS+StopLoss*pt, dg); // 보류 중인 판매 주문의 StopLoss 가격 수준 정규화
이중 tpSS=NormalizeDouble(SetS-TakeProfit*pt, dg); // 보류 중인 판매 주문의 TakeProfit 가격 수준 정규화
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------
이해하다... :)
그리고 StopLevel의 존재를 잊지 마십시오. - int StLev=MarketInfo(Symbol(), MODE_STOPLEVEL);
스톱과 테이크를 배치하기 위한 최소 거리를 확인하여 이 값보다 작지 않도록 합니다.
정말 감사합니다!!! 이건 내가 정리할게! )
변경된 윈도우. 경고 창이 뜨지 않습니다. 소리 알림이 있고 로그 항목이 있지만 플로팅 창이 팝업되지 않습니다.
터미널을 청소하고 모든 것을 다시 컴파일했습니다. 이유는 무엇입니까?
함수를 만들고 호출하는 방법은 무엇입니까?
다시 한 번 반복 합니다 - 교과서를 읽고 재료를 연구하십시오 ... :)