MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 39 1...323334353637383940414243444546...1953 새 코멘트 [삭제] 2016.12.19 21:33 #381 trader781 : 나는 그것을 설명하는 방법을 모른다. 그러나 그것은 확실히 걸작입니다. 나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 .. Mickey Moose 2016.12.19 21:38 #382 Movlat Baghiyev : 나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 .. 너같은 뉴비인데 나도 궁금한게 많아 for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS )== true ) { if ( OrderSymbol ()!= 기호 () || OrderMagicNumber ()!=Magic) 계속 ; if ( 주문유형 ()== OP_BUY || 주문 유형 ()== OP_SELL ) p++; 경우 ( 주문 유형 ()== OP_BUYSTOP ) if (bue_signal) OrderDelete ( OrderTicket ()); 그렇지 않으면 b++; if ( 주문 유형 ()== OP_SELLSTOP ) if (sell_signal) OrderDelete ( OrderTicket ()); 그렇지 않으면 s++; } } 1) 어디에서 b++ 를 얻었습니까? 2) 어디에서 s++ 를 얻었습니까? 삼) if (signal_bue) 이것은 또 무엇입니까? 나머지 코드도 마찬가지입니다. 기분이 상했다면 죄송합니다. Any questions from newcomers Magicnumber and looping [경고, 주제 닫힘!] 포럼을 [삭제] 2016.12.19 21:45 #383 이것은 아마도 더 나은 //+------------------------------------------------------------------+ //| ОТЛОЖКИ.mq4 | //+------------------------------------------------------------------+ extern double StopLoss = 100 ; //Стоплосс ордера extern double TakeProfit = 150 ; //Тейкпрофит ордера extern double TrailingStop = 100 ; // трал extern int Delta = 100 ; //Расстояние от цены для установки ордера extern double LOT = 0.1 ; //Объём позиции extern int Magic = 2 ; //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if (TrailingStop!= 0 ) Trailing(); //ИНДИКАТОР RSI double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 ); double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 ); int b = 0 , s = 0 , p = 0 , res = 0 ; double BuyPrice= Ask +Delta* Point ; double SellPrice= Bid -Delta* Point ; for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS )== true ) { if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ; if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++; if ( OrderType ()== OP_BUYSTOP ) { if (RSI0< 50 &&RSI1> 50 ) OrderDelete ( OrderTicket ()); else b++; } if ( OrderType ()== OP_SELLSTOP ) { if (RSI0> 50 &&RSI1< 50 ) OrderDelete ( OrderTicket ()); else s++; } } } double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить //---- buy stop if (RSI0> 50 &&RSI1< 50 && p< 1 && b< 1 ) // < !!!!!!!!! { res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue); } //---- sell stop if (RSI0< 50 &&RSI1> 50 && p< 1 && s< 1 ) // < !!!!!!!!! { res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red); } //---- return ( 0 );} Any questions from newcomers Please correct this EA RSI EA code help Alekseu Fedotov 2016.12.19 21:46 #384 Movlat Baghiyev : 나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 .. 그래서 더 쉽습니다: void OrderDelete_( int Type) { for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS )== true ) { if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ; if ( OrderType ()==Type) OrderDelete ( OrderTicket ()); } } } 이것은 void OnTick() 함수 외부 어딘가에 있습니다. if (сигнал_bue) OrderDelete_( OP_SELLSTOP ); if (сигнал_sell)OrderDelete_( OP_BUYSTOP ); 그리고 이것은 void OnTick() 함수 의 본문에 있습니다. [삭제] 2016.12.19 21:49 #385 Alekseu Fedotov : 그리고 이것은 void OnTick() 함수 의 본문에 있습니다. 코드 수정 부탁드립니다 Vitalie Postolache 2016.12.19 21:57 #386 trader781 : 확인. 그는 그가 할 수있는 것을 얻은 것 같습니다. 설명이 이루어졌습니다. 목표는 원하는 대로 작동하지 않는 이유를 이해하는 것입니다. if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요??? 더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다. Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까? 이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오. 더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요? FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다. ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ... 백테스팅/최적화 오류, 버그, 질문 절반 부지를 폐쇄합니다. Alekseu Fedotov 2016.12.19 22:11 #387 Movlat Baghiyev : 코드 수정 부탁드립니다 시도 ^_~ extern double StopLoss = 100 ; //Стоплосс ордера extern double TakeProfit = 150 ; //Тейкпрофит ордера extern double TrailingStop = 100 ; // трал extern int Delta = 100 ; //Расстояние от цены для установки ордера extern double LOT = 0.1 ; //Объём позиции extern int Magic = 2 ; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- create timer //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { //--- destroy timer } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick () { int res = 0 ; //ИНДИКАТОР RSI double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 ); double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 ); double BuyPrice= Ask +Delta* Point ; double SellPrice= Bid -Delta* Point ; //---- buy stop if (RSI0> 50 &&RSI1< 50 && Number( OP_BUYSTOP )< 0 && Number( OP_BUY )< 1 ) // < !!!!!!!!! { res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue); } //---- sell stop if (RSI0< 50 &&RSI1> 50 && Number( OP_SELLSTOP )< 0 && Number( OP_SELL )< 1 ) // < !!!!!!!!! { res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red); } //---- if (RSI0> 50 &&RSI1< 50 ) OrderDelete_( OP_SELLSTOP ); if (RSI0< 50 &&RSI1> 50 )OrderDelete_( OP_BUYSTOP ); } //+------------------------------------------------------------------+ void OrderDelete_( int Type) { bool r; for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS )== true ) { if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ; if ( OrderType ()==Type) r = OrderDelete ( OrderTicket ()); } } } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int Number( int Type) { int kp= 0 ; for ( int i= 0 ; i< OrdersTotal (); i++) { if ( OrderSelect (i, SELECT_BY_POS )== true ) { if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ; if ( OrderType ()==Type) kp++; } } return (kp); } //+------------------------------------------------------------------+ Any questions from newcomers RSI EA code help problem MT 4 pending [삭제] 2016.12.19 22:18 #388 Alekseu Fedotov 감사합니다. 신이 당신을 지키길.. Mickey Moose 2016.12.19 22:24 #389 Vitalie Postolache : if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요??? 더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다. Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까? 이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오. 더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요? FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다. ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ... 수정하겠습니다 당신은 그것을 다른 곳에 둘 수 없습니다, 그것은 잘못된 매개 변수가 될 것입니다 가장 최근의 것을 고려해야 함 나는 변화하려고 노력할 것이다 후자의 경우, 음, 예) 표준 OrderModify()로 해결하려고했지만 많은 주문이 지속적으로 동시에 이동되면 계정이 금지됩니다. 비판해 주셔서 감사합니다. Artyom Trishkin 2016.12.19 23:50 #390 spoiltboy : 예, 브래킷으로 밀봉되었습니다. 나머지 질문은 관련이 있습니다. bool condition; if (condition) {} ~에 상당하다 if (condition== true ) {} 그리고 if (!condition) {} ~에 상당하다 if (condition== false ) {} 더 짧고 친숙합니다. 1...323334353637383940414243444546...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
나는 그것을 설명하는 방법을 모른다. 그러나 그것은 확실히 걸작입니다.
나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 ..
너같은 뉴비인데 나도 궁금한게 많아
for ( int i= 0 ; i< OrdersTotal (); i++){
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= 기호 () || OrderMagicNumber ()!=Magic) 계속 ;
if ( 주문유형 ()== OP_BUY || 주문 유형 ()== OP_SELL ) p++;
경우 ( 주문 유형 ()== OP_BUYSTOP )
if (bue_signal) OrderDelete ( OrderTicket ());
그렇지 않으면 b++;
if ( 주문 유형 ()== OP_SELLSTOP )
if (sell_signal) OrderDelete ( OrderTicket ());
그렇지 않으면 s++;
}
}
1) 어디에서 b++ 를 얻었습니까?
2) 어디에서 s++ 를 얻었습니까?
삼) if (signal_bue) 이것은 또 무엇입니까?
나머지 코드도 마찬가지입니다. 기분이 상했다면 죄송합니다.
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 100 ; //Стоплосс ордера
extern double TakeProfit = 150 ; //Тейкпрофит ордера
extern double TrailingStop = 100 ; // трал
extern int Delta = 100 ; //Расстояние от цены для установки ордера
extern double LOT = 0.1 ; //Объём позиции
extern int Magic = 2 ;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!= 0 ) Trailing();
//ИНДИКАТОР RSI
double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
int b = 0 , s = 0 , p = 0 , res = 0 ;
double BuyPrice= Ask +Delta* Point ;
double SellPrice= Bid -Delta* Point ;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
if ( OrderType ()== OP_BUYSTOP )
{
if (RSI0< 50 &&RSI1> 50 )
OrderDelete ( OrderTicket ());
else
b++;
}
if ( OrderType ()== OP_SELLSTOP )
{
if (RSI0> 50 &&RSI1< 50 )
OrderDelete ( OrderTicket ());
else
s++;
}
}
}
double SL,TP; // < !!!!!!!!! эти переменные не используются, можно удалить
//---- buy stop
if (RSI0> 50 &&RSI1< 50 && p< 1 && b< 1 ) // < !!!!!!!!!
{
res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
}
//---- sell stop
if (RSI0< 50 &&RSI1> 50 && p< 1 && s< 1 ) // < !!!!!!!!!
{
res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red);
}
//----
return ( 0 );
}
나는 여기 그들이 찌르는 것을 좋아한다고 말합니다)) 그리고 Trishkin은 여전히 이것에 기분이 상했습니다 .. 그는 그들이 도울 코드가있을 것이라고 말했습니다 ..
그래서 더 쉽습니다:
{
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()==Type)
OrderDelete ( OrderTicket ());
}
}
}
이것은 void OnTick() 함수 외부 어딘가에 있습니다.
if (сигнал_sell)OrderDelete_( OP_BUYSTOP );
그리고 이것은 void OnTick() 함수 의 본문에 있습니다.
그리고 이것은 void OnTick() 함수 의 본문에 있습니다.
확인.
그는 그가 할 수있는 것을 얻은 것 같습니다. 설명이 이루어졌습니다. 목표는 원하는 대로 작동하지 않는 이유를 이해하는 것입니다.
if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요???
더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다.
Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까?
이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오.
더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요?
FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다.
ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ...
코드 수정 부탁드립니다
시도 ^_~
extern double TakeProfit = 150 ; //Тейкпрофит ордера
extern double TrailingStop = 100 ; // трал
extern int Delta = 100 ; //Расстояние от цены для установки ордера
extern double LOT = 0.1 ; //Объём позиции
extern int Magic = 2 ;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
int res = 0 ;
//ИНДИКАТОР RSI
double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
double BuyPrice= Ask +Delta* Point ;
double SellPrice= Bid -Delta* Point ;
//---- buy stop
if (RSI0> 50 &&RSI1< 50 && Number( OP_BUYSTOP )< 0 && Number( OP_BUY )< 1 ) // < !!!!!!!!!
{
res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
}
//---- sell stop
if (RSI0< 50 &&RSI1> 50 && Number( OP_SELLSTOP )< 0 && Number( OP_SELL )< 1 ) // < !!!!!!!!!
{
res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red);
}
//----
if (RSI0> 50 &&RSI1< 50 ) OrderDelete_( OP_SELLSTOP );
if (RSI0< 50 &&RSI1> 50 )OrderDelete_( OP_BUYSTOP );
}
//+------------------------------------------------------------------+
void OrderDelete_( int Type)
{
bool r;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()==Type)
r = OrderDelete ( OrderTicket ());
}
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Number( int Type)
{
int kp= 0 ;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()==Type)
kp++;
}
}
return (kp);
}
//+------------------------------------------------------------------+
if () 블록 내부에 else 가 있습니다. 원래 그런 뜻이었나요???
더 나아가. 초기화되지 않은 전역 변수 count는 Counts() 함수에 전달되며, 이 함수도 함수 자체에서 다시 선언됩니다.
Counts() 함수는 주문을 다시 계산하지만 주 함수에서 여러 번 변경되는 일부 티켓과 주문을 비교합니다. 그러나 티켓의 값은 함수가 트리거되는 시점에서 동일합니다. 그렇다면 함수는 얼마나 많은 주문을 계산할까요? 정말 하나 이상입니까?
이 형식의 이 함수는 인수가 필요하지 않습니다. 호출하고 결과를 반환하도록 하십시오.
더 나아가. FindLastOType() 함수는 다시 티켓과의 비교입니다. 올바른 티켓과 비교한다고 보장할 수 있습니까? 필요한 마법과 기호가 있는 첫 번째 주문을 찾았을 때 루프를 깨고 주문 유형을 반환하는 것이 더 쉽지 않을까요?
FindLastOrderOpenPrice() 및 FindLastLot()와 동일합니다.
ModifyOrders() 함수가 너무 무서워서 밤에 악몽을 꾸지 않고 잠들기 위해 오랫동안 그것을 보지 않았습니다 ...
수정하겠습니다
당신은 그것을 다른 곳에 둘 수 없습니다, 그것은 잘못된 매개 변수가 될 것입니다
가장 최근의 것을 고려해야 함
나는 변화하려고 노력할 것이다
후자의 경우, 음, 예) 표준 OrderModify()로 해결하려고했지만 많은 주문이 지속적으로 동시에 이동되면 계정이 금지됩니다.
비판해 주셔서 감사합니다.
예, 브래킷으로 밀봉되었습니다. 나머지 질문은 관련이 있습니다.
bool condition;
if (condition) {}
~에 상당하다
if (condition== true ) {}
그리고
if (!condition) {}
~에 상당하다
if (condition== false ) {}
더 짧고 친숙합니다.