[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 47

 
PapaYozh :


아니오, 정확하지 않습니다. 더욱 심해졌습니다 :)

RefreshRates()는 미리 정의된 Ask 및 Bid 변수 의 값을 업데이트하므로 Price 변수에 저장된 값을 사용합니다.


알겠습니다 :-) 이 함수의 실행이 OrderSend에 도달할 때 Price에 액세스한다고 생각했습니다.

 int OpenPosition( string AdvisorName, int Position, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); double Price;
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){
 string OrderName = StringConcatenate (AdvisorName, " - Покупка по рынку" );
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){
 OrderName = StringConcatenate (AdvisorName, " - Продажа по рынку" ); ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} while (N < Сount){
 if (Position == OP_BUY){ RefreshRates (); Price = NormalizeDouble (Ask, Digits );}
 if (Position == OP_SELL){ RefreshRates (); Price = NormalizeDouble (Bid, Digits );}
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,OrderName,Magic, 0 ,Arrow);
 if (Ticket > 0 ){ if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)){ int Flag = 1 ; 
 PlaySound ( "recharge.wav" ); break ;}}
 else {Flag = 0 ; int PRM = GetLastError (); string ERR = Error(PRM, "OrderSend()" ); 
 ErrorProcessing(AdvisorName+ " " +PeriodString,ErrorName+ " " +PRM+ " (" +
 Error(PRM, "OrderSend()" )+ ")" , "" , "OrderSend()" ); N++; Sleep ( 5000 );}
 if (N == Сount){ErrorProcessing(AdvisorName+ " " +PeriodString,CriticalErrorName,
 MailCriticalErrorName+ " " +PRM+ " (" +Error(PRM, "OrderSend()" )+ ")" , "OrderSend()" );}}
 return (Flag);}
글쎄, 지금은 맞는 것 같죠?))))
 
Dimoncheg :


알겠습니다 :-) 이 함수의 실행이 OrderSend에 도달할 때 Price에 액세스한다고 생각했습니다.

글쎄, 지금은 맞는 것 같죠?))))


예, 그렇습니다.
 
int BlackOrWhite( int countbar)
{
int result_= 0 ;
 
if ( iClose ( NULL , 0 ,countbar)- iOpen ( NULL , 0 ,countbar))
result_= 1 ;
else
result_=- 1 ;
 
if ( iOpen ( NULL , 0 ,countbar)== iClose ( NULL , 0 ,countbar))
result_= 0 ;
 
return (result_);
}

함수는 어떤 이유로 인해 하나의 값만 제공합니다. + 컴파일러는 다음과 같이 맹세합니다.

' iClose ' - 비교 표현식이 필요함

무슨 일인지 이해가 안 돼요.

 if (BlackOrWhite( 1 )> 0 )
      {
그래서 프로그램에서 사용합니다.
 
nuan :

함수는 어떤 이유로 인해 하나의 값만 제공합니다. + 컴파일러는 다음과 같이 맹세합니다.

'iClose' - 비교 표현식이 필요함

무슨 일인지 이해가 안 돼요.

그래서 프로그램에서 사용합니다.



 if ( iClose ( NULL , 0 ,countbar)- iOpen ( NULL , 0 ,countbar)> 0 )
   result_= 1 ;
else
   result_=- 1 ;

그 쯤

 if ( iClose ( NULL , 0 ,countbar)> iOpen ( NULL , 0 ,countbar))
   result_= 1 ;
else
   result_=- 1 ;
 
PapaYozh :

예, 그렇습니다.

모든 것이 작동하는 것 같습니다, 감사합니다
 
매우 감사합니다.
 

안녕하세요. 도움이 필요하다. 질문은 다음과 같습니다.

주문이 완료된 후에는 다른 모든 주문을 어떻게 마감해야 하는지는 중요하지 않습니다. 그리고 다시 조건에 따라 새로운 것이 열려야 합니다.

 
sergey_r :

안녕하세요. 도움이 필요하다. 질문은 다음과 같습니다.

주문이 완료된 후에는 다른 모든 주문을 어떻게 마감해야 하는지는 중요하지 않습니다. 그리고 다시 조건에 따라 새로운 것이 열려야 합니다.


여기 튜토리얼 읽었습니까?
 

나는 지금까지 사용

정적 부울 order_opened = 거짓;

if(order_opened){반품(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
경고(GetLastError()); // 주문 오류에 대한 메시지
order_opened = 참; // 주문이 성공했다면 더 이상 열지 마십시오.

이제 이 주문이 작동한 후 새 주문을 다시 열어야 합니다.

 
sergey_r :

나는 지금까지 사용

정적 부울 order_opened = 거짓;

if(order_opened){반품(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Blue);
경고(GetLastError()); // 주문 오류에 대한 메시지
order_opened = 참; // 주문이 성공했다면 더 이상 열지 마십시오.

이제 이 주문이 작동한 후 새 주문을 다시 열어야 합니다.



튜토리얼 및 문서를 읽고 포즈 조건에 따라 열기, 닫기 로직을 변경하고 CTRL+ALT+M을 사용 하여 코드를 붙여넣습니다 .