[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 597

 
Craft :

안녕하세요. 저는 계속 코딩을 다루고 있습니다. 튜토리얼 섹션의 기사에서 조언자의 예를 가져와서 예제의 코드를 교체했습니다.

임의의 훈련:

거래가 표시되지 않습니다. 이유가 무엇인지, 코드를 수정하는 방법을 알려주십시오.


 double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен, 
// не видно оператора двигающего индекс массива.
// лучше пока не освоили работу с массивами обьявите переменные и не парьтесь

   double MA_0= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   double MA_1= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 1 );
  
  if (MA_1 < MA_0)
     {                                           // ..МА последнего бара выше предыдущего
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1 > MA_0)
     {                                           // ..МА последнего бара ниже предыдущего
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

Urain님 , 감사합니다. 저는 mql의 논리에 놀라지 않을 수 없습니다. 하지만 for(int i=1; 사용해 보면 스크립트를 단순화할 수 없습니다. 배열 방법을 알려주지 않아도 여전히 할 수 있습니다.) t 언어의 논리를 느끼기 위해 배열을 이동하는 연산자를 결정하는 것은 무엇입니까?

추신: 배열을 선언하고 예제 스크립트에서 실수로 삭제했습니다.

   double MA_1[];
   ArrayResize (MA_1,Period_MA);

   MA_1[ 0 ]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 0 );

   if (MA_1[ 1 ] < MA_1[ 0 ])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[ 1 ] > MA_1[ 0 ])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 
Abzasc :
가격 차이. 결과적으로 - 반대로 지표의 결과가 다릅니다 ...
나는 거기에서 다른 것을 볼 수 없습니다. 지표는 잊어버리십시오. 다시 한 번 말씀드리지만 귀하가 거래하는 지표가 귀하에게 적합한 지표입니다. 당신은 옳은 일에 집중하고 있지 않습니다.
 
#속성 표시기_분리_창
#속성 표시기_버퍼 2
#property indicator_color1 파란색
#property indicator_color2 빨간색

외부 정수 n = 20;
외부 int t3_period = 5;
외부 이중 b = 0.618;
외부 int mbars = 300;
extern int Bars.Count = 0;
int i,t,c;
이중 Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52, e62;


//+----------------------------------------------- --------------------+
정수() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, 버퍼1);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, 버퍼2);
리턴(0); }
//+----------------------------------------------- --------------------+
정수 시작() {
정수 제한;
if (IndicatorCounted()<0) return(-1);
limit=Bars-IndicatorCounted();
if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
for(int i=0; i<limit; i++)
{

b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); n1=t3_period;

if(n1<1) n1=1; n1=1+0.5*(n1-1); w1=2/(n1+1); w2=1-w1;

if(AcBars==0) ​AcBars=바-mBars;

for(c=AcBars; c<=바-1; c++) { i=바-1-c; {

if(닫기[i]>닫기[i+1]) { Ch_p[i]=닫기[i]-닫기[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; }
그렇지 않으면 { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=닫기[i+1]-닫기[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }}

for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; }

k_p=ch_p-cff_n; k_n=ch_n-cff_p;

A1=k_p; e1=w1*A1+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4;
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; 버퍼1[i]=t3;

A2=k_n; e12=w1*A2+w2*e12; e22=w1*e12+w2*e22; e32=w1*e22+w2*e32; e42=w1*e32+w2*e42;
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32;

AcBars=AcBars+1; 채널_p=0; 채널_n=0; cff_p=0; cff_n=0; }
}

리턴(0); }


오류가 업데이트되지 않은 위치를 알려주십시오. 기록은 정상적으로 표시되지만 온라인은 표시되지 않습니다.

파일:
 

안녕하세요. 배열이 선언 되고 배열 인덱스를 이동하는 연산자가 설정되고 주문이 수행되지 않습니다. 무슨 일이야.

   double MA_1[];
   ArrayResize (MA_1,Period_MA);

   for ( int j= 0 ;j<=Period_MA- 1 ;j++)
   MA_1[j]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE ,j);

   
   if (MA_1[j+ 1 ] < MA_1[j])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+ 1 ] > MA_1[j])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

OrderSend 가 등록을 시도하면 모든 것이 밝혀질 것입니다 ...

MetaEditore의 표준 도움말을 읽으셨습니까? 그렇지 않다면 전체를 읽으십시오 ...

Craft :

안녕하세요. 배열이 선언되고 배열 인덱스를 이동하는 연산자가 설정되고 주문이 수행되지 않습니다. 무슨 일이야.

 
얘들 아, 이익이없는 모든 주문을 마감하고 손실이 특정 값을 초과하는 Igor Kim의 기능을 다시 만들 수 있는지 알려주십시오.
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.04.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых убыток в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит/убыток                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , double pr= 0 ) {
   int i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (OrderProfit()+OrderSwap()<- MathAbs (pr)) ClosePosBySelect();
          }
        }
      }
    }
  }
}
손실이 가장 큰 열린 포지션 을 찾아야 합니다.
결론은 가장 수익성이 없는 포지션보다 이익이 더 큰 포지션을 더 찾아 반대편에서 닫아야 한다는 것입니다.
누군가 이미 이 문제에 대한 경험이 있거나 이미 그러한 문제가 발생했을 수 있습니까?
 
서로 다른 원리로 작동하는 3개의 지표가 거의 동일한 그림(spearman, stochastic 및 mcd-rsi)을 나타내는 이유는 무엇입니까? 60% 이상의 확률로 올바른 움직임과 진입을 보여주지 못하는 이유는 무엇입니까? 또는 할 수 있습니까?
 
안녕하세요 여러분! 따라서 이익에서 X 지점을 지나 Y>OrderOpenPrice 지점까지 거부하기 시작한 후 주문을 마감하려면 어떤 코드가 필요한지 의문이 생겼습니다.
 
StatBars :

OrderSend가 등록을 시도하면 모든 것이 밝혀집니다 ...

MetaEditore의 표준 도움말을 읽으셨습니까? 그렇지 않다면 전체를 읽으십시오 ...


어린 시절부터 도움을 청하지 않고 질문을 던지며 Yandex는 성장했습니다. Sendov 바다, 그러나 위치는 열리지 않습니다:

 double MA_1[];
   ArrayResize (MA_1,Period_MA);

   for ( int j= 0 ;j<=Period_MA- 1 ;j++)
   MA_1[j]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE ,j);

   
   if (MA_1[j+ 1 ] < MA_1[j])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+ 1 ] > MA_1[j])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
   // Открытие ордеров
   while (true)                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B==true)               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         SL=Bid - New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lts,Ask, 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S==true)               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         SL=Ask + New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Ask - New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lts,Bid, 2 ,SL,TP); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }