[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을 사용 하여 코드를 붙여넣습니다 .