포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 374

 

안녕하세요. 상황에 대처할 수 있도록 도와주세요.

Buf0[i]=iCCI(NULL,0,8,PRICE_OPEN,i-1)-iCCI(NULL,0,8,PRICE_OPEN,i)를 뺄 때 testF2가 한 경우에 왜; 모든 것이 잘되고 있습니다

다른 경우에는 동일한 작업을 수행하는 testF1 Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i-1)-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i) ; 마지막 막대가 무너지나요? 왜 iCCI의 경우 이런 일이 일어나지 않는데 iMA의 경우 막대가 무너져요????

이것은 어떻게 든 고칠 수 있습니까?

파일:
testf1.mq4  1 kb
testf2.mq4  1 kb
 

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN, i-1 )-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

ema의 경우 i=0일 때 -1 bar를 계산할 때 무한대로 던집니다.

더 나은 방법:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i ) -iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

그리고 오른쪽으로 1bar씩 제공한 변형에서처럼 시프트가 필요한 경우 SetIndexShift (0,1)를 통해 초기화에서 명시적으로 구현하는 것이 좋습니다.

 
ALXIMIKS :

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN, i-1 )-iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i);

ema의 경우 i=0일 때 -1 bar를 계산할 때 무한대로 던집니다.

더 나은 방법:

Buf0[i]=iMA(NULL,0,8,0,MODE_EMA,PRICE_OPEN,i ) -iMA(NULL,0,8,1,MODE_SMA,PRICE_OPEN,i+1);

그리고 오른쪽으로 1bar씩 제공한 변형에서처럼 시프트가 필요한 경우 SetIndexShift (0,1)를 통해 초기화에서 명시적으로 구현하는 것이 좋습니다.



대단히 감사합니다. 하지만 저는 이것을 완벽하게 이해합니다. 하지만 iCCI에서는 롤링되지만 iMA에서는 롤링되지 않는 이유는 무엇입니까 ???
 
       if (( NormalizeDouble (priceopen+start* Point , Digits )<= Bid )&&( NormalizeDouble ( Bid -sl* Point , Digits )> NormalizeDouble (dist* Point , Digits )))
         {   
                sl= NormalizeDouble ( Bid -dist* Point , Digits ); 
에크부르크:


정확한 조건이 아닌 경우, 가격에서 주문을 위한 견적까지의 거리를 계산하지만, 가격에서 현재 정류장까지의 거리가 필요합니다! :)

동시에 long과 short에 대해 서로 다른 계산이 있어야 합니다.) 그렇지 않으면 어떤 경우에는 계산이 음수이고 다른 하나는 양수입니다. 따라서 후행은 어떤 방향에서는 작동하지만 다른 방향에서는 작동하지 않습니다.

여기에 두 개의 블록이 필요합니다. 짧은 경우 첫 번째 블록으로 보내고, 길면 두 번째 블록으로 보냅니다. 그러면 계산, 검사 및 후행 자체가 있습니다.


여전히 아무것도 나오지 않습니다 ... 오래 시도합니다. 시도한 것이 너무 많아서 무엇을했는지 또는하지 않았는지 기억나지 않습니다.))
 
clubsmi :


대단히 감사합니다. 하지만 저는 이것을 완벽하게 이해합니다. 하지만 iCCI에서는 롤링되지만 iMA에서는 롤링되지 않는 이유는 무엇입니까 ???


여기저기서 오류는 SSI에만 있었고 계산의 특성을 고려할 때 시각적이지 않습니다.

그리고 MA, 특히 EMA를 사용하면 가시성을 확보할 수 있다고 생각합니다.

 
vadynik :

여전히 아무것도 나오지 않습니다 ... 오래 시도합니다. 시도한 것이 너무 많아서 무엇을했는지 또는하지 않았는지 기억나지 않습니다.))

sl을 OrderStopLoss()로 교체
 
Vinin :

그래서 당신은 팁으로 살 것입니까?
내가 이 문제의 전문가가 될 때까지.
이제 힌트가 필요하지 않습니까? :)
 

EURAUD 및 AUDUSD와 같이 매수 또는 매도를 위해 두 가지 주문을 여는 프로그램이 있습니다. 이 프로그램은 이러한 쌍 또는 다른 쌍에 대해 터미널에서 열린 주문이 없는 경우에만 작동합니다. 터미널에 하나 이상의 주문이 있으면 거래가 열리지 않습니다. 질문 - 터미널에 미결 주문이 있는지 여부에 관계없이 주문 시작을 프로그래밍하는 방법은 무엇입니까? 답변에 미리 감사드립니다.

 extern double lotAU= 1.3 ;
extern double lotEA= 1.0 ;
extern double Profit= 30 ;
extern int Operation= 0 ;
extern string Сomment           = "KVAZ" ;
extern int Magic                = 1111 ;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double prof;
double bidEA = MarketInfo ( "EURAUD" , MODE_BID );
double askEA = MarketInfo ( "EURAUD" , MODE_ASK );
double bidAU = MarketInfo ( "AUDUSD" , MODE_BID );
double askAU = MarketInfo ( "AUDUSD" , MODE_ASK );

string symEA = "EURAUD" ;
string symAU = "AUDUSD" ;

for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
{
 OrderSelect (i, SELECT_BY_POS );
 prof=prof+ OrderProfit ();
 Print ( "Profit=" +prof);
}
if (prof>=Profit)
{
 for (i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   OrderSelect (i, SELECT_BY_POS );
  {
   if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
   OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 5 , 0 );
  }
 }
}
if ( OrdersTotal ()== 0 )
{
 if (Operation== 0 )
 {
   OrderSend (symEA, OP_BUY ,lotEA,askEA, 3 , 0 , 0 , "KVAZ" ,Magic, 0 ,Blue);
   OrderSend (symAU, OP_BUY ,lotAU,askAU, 3 , 0 , 0 , "KVAZ" ,Magic, 0 ,Blue); 
 }
 if (Operation== 1 )
 {
   OrderSend (symEA, OP_SELL ,lotEA,bidEA, 3 , 0 , 0 , "KVAZ" ,Magic, 0 ,Red);
   OrderSend (symAU, OP_SELL ,lotAU,bidAU, 3 , 0 , 0 , "KVAZ" ,Magic, 0 ,Red);
 }
}  
   return ( 0 );
  }
 
alexey1979621 :

EURAUD 및 AUDUSD와 같이 매수 또는 매도를 위해 두 가지 주문을 여는 프로그램이 있습니다. 이 프로그램은 이러한 쌍 또는 다른 쌍에 대해 터미널에서 열린 주문이 없는 경우에만 작동합니다. 터미널에 하나 이상의 주문이 있으면 거래가 열리지 않습니다. 질문 - 터미널에 미결 주문이 있는지 여부에 관계없이 주문 시작을 프로그래밍하는 방법은 무엇입니까? 답변에 미리 감사드립니다.


체크 제거
 if ( OrdersTotal ()== 0 )
 
evillive :

체크 제거
예, 이제 열리지만 많은 거래가 있지만 EURAUD 및 AUDUSD와 같이 주어진 쌍에 대해 두 개의 거래만 열면 됩니다.