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

 
rustein :

질문이 정확히 어디에 있습니까?
 
ilunga :
질문이 정확히 어디에 있습니까?
https://www.mql5.com/ru/forum/115354/page78
 

제공한 코드에서 주문이 1개만 있는 경우 루프

 for (;Cnt>= 0 ;Cnt--)
    {
       RefreshRates ();
       OrderSelect (Cnt,SELECT_BY_POS);
       if ( OrderMagicNumber ()==Magic)
      {
      TotalOpenOrders++;
      }
    }

2회 실행됩니다. 처음으로 존재하지 않는 주문을 선택하려는 시도가 있을 것입니다.

 
ilunga :

제공한 코드에서 주문이 1개만 있는 경우 루프

2회 실행됩니다. 처음으로 존재하지 않는 주문을 선택하려는 시도가 있을 것입니다.

고마워, 내가 직접 고칠게.
 
artmedia70 :
단말기는 고민하다가 15분만에 죽여버렸어
무...
나는 1분도 기다리지 않고 죽였을 것이다.
 
PapaYozh :

Ask 및 Bid를 사용하기 직전에 RefreshRates() 를 실행하십시오.


시도했지만 변경 사항 없음

주문을 보내는 기능, 모든 것이 표준인 것 같습니다.

 int OpenPosition( string AdvisorName, int Position, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); 
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){ double Price = NormalizeDouble (Ask, Digits ); 
 string OrderName = " - Покупка по рынку" ;
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){Price = NormalizeDouble (Bid, Digits ); 
 OrderName = " - Продажа по рынку" ; ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} RefreshRates (); while (N < Сount){ RefreshRates (); 
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,AdvisorName+
 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 :


시도했지만 변경 사항 없음

주문을 보내는 기능, 모든 것이 표준인 것 같습니다.


먼저 RefreshRates() 함수로 가격을 업데이트하고 필요한 가격을 Price에 저장합니다.

그런 다음 Sleep(Interval)을 실행하고 이때 따옴표가 변경됩니다.

그리고 그 후 작년의 견적으로 OrderSend()를 호출 합니다.

문제는 그 대가로 무엇을 받기를 기대하느냐는 것입니다.

 
PapaYozh :


먼저 RefreshRates() 함수로 가격을 업데이트하고 필요한 가격을 Price에 저장합니다.

그런 다음 Sleep(Interval)을 실행하고 이때 따옴표가 변경됩니다.

그리고 그 후 작년의 견적으로 OrderSend()를 호출합니다.

문제는 그 대가로 무엇을 받기를 기대하느냐는 것입니다.


잼에서 엉뚱한 곳에서 조금 현대화해서 이제 기능의 한계를 넘어 가격을 없앴다

OpenPosition( "Sovetneg" ,OP_BUY, NormalizeDouble (Ask, Digits ),Magic,SlowlyIncreasingLots( 0.2 ),MultiStop(OP_BUY,StopLoss));
기능 자체는 이제
 int OpenPosition( string AdvisorName, int Position, double Price, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); 
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){
 string OrderName = " - Покупка по рынку" ;
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){
 OrderName = " - Продажа по рынку" ; ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} while (N < Сount){ RefreshRates (); 
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,AdvisorName+
 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);}
이제 맞는 것 같습니까?
 

안녕하세요.

유형 == 4가 무엇을 의미하는지 말하지 마십시오

그리고 유형==5

다음 스니펫에서:

이중 ma=iMA(Symbol(), PERIOD_D1,21,0 ,MODE_SMA,PRICE_CLOSE,0);

for(int k=1; k<=OrdersTotal(); k++)
bool select=주문선택(k-1,SELECT_BY_POS);

if(선택)
{
inttype=주문 유형();
int 티켓=OrderTicket();

if (입찰가<ma && 유형==4)
OrderDelete(티켓);
if (입찰가>ma && 유형==5)
OrderDelete(티켓);
}

주문 삭제 조건은 ma가 이해할 수 있다는 것을 이해하지만 함께 어떻게?

고맙습니다.

 
Dimoncheg :


이제 맞는 것 같습니까?


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

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