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

 
Roman. :

그는 이미 다른 스레드에서 그것에 대해 질문했습니다. 그들은 대답했습니다... 하지만 그는 코드를 이해하지 못합니다. 그는 그것에 대해 직접 썼습니다.

그는 스크립트가 필요합니다(기성 솔루션 - 키를 눌렀음(스크립트 실행) - 화면을 보았음).



남은 일은 그를 우리 계정에 투자하도록 초대하는 것뿐입니다! :))

 
borilunad :


남은 일은 그를 우리 계정에 투자하도록 초대하는 것뿐입니다! :))


좋은 아이디어지만 구현하기 어렵다
 

 

호즈 :

Che와 나는 이미 완전히 혼란스러워했습니다. 다음은 3가지 기능으로, 각 기능은 특정 칠면조에 대한 고유한 신호를 수신합니다.

이 함수는 모든 칠면조로부터 공통 신호를 받아 BUY 또는 SELL 을 결정합니다.

그리고 이것은 일반 신호를 얻는 주요 기능입니다. 여기에서 모든 막대를 통과하는 루프를 통해 칠면조 값을 얻습니다. 기능:

int GetCrossingMa(더블& i_maFast1, 더블& i_maFast2, 더블& i_maSlow1, 더블& i_maSlow2)

int GetStochSignal(더블& stochD1, 더블& stochD2, 더블& stochK1, 더블& stochK2)

void GetMomentumSignal() , 원칙적으로 거기에 밀어 넣을 수도 있습니다.

따라서 칠면조의 모든 계산은 신호를 수신하는 하나의 주요 기능에 있음이 밝혀졌습니다. 여기에서는 모든 것이 논리적입니다.

타라스BY :

승리자! 당신은 논리가 있지만 지식은 여전히 충분하지 않습니다. 첫째, 이 사업을 포기하지 않는다면 교과서를 뛰어넘는 데 도움이 되겠지만, 둘째를 '승리'하기 위해서는 당분간 (교과서부터) 시작해야 한다. 논리적 코드 구조를 구축할 준비가 되지 않았습니다(아직). 알파벳 버전으로 돌아가십시오.
추신: 귀하의 코드에서 "눈에 띄는" 것은 무엇입니까?

GetSignal() 함수에서 for 루프는 두 줄의 교차점을 찾는 데 사용할 수 있지만 개인 취향이지만 while 루프 가 더 좋습니다. 그리고 우선 "실행, 용서할 수 없습니다."와 같이 코드가 음성을 실행하려면 괄호를 이동해야 합니다. 어떤 이유로 이 (결과) 함수는 GetStochSignal() 및 GetMomentumSignal()의 두 함수 결과를 포함하지 않습니다. 이것은 LITTLE 비트 비논리적입니다.

GetCrossingMa() 및 GetStochSignal() 함수에는 참조로 매개변수를 전달할 필요가 없습니다. 함수 내부의 이러한 변수가 값을 변경하면 의미가 있기 때문입니다.

void GetMomentumSignal() 함수는 아무것도 반환하지 않습니다.

측면에서 "보기가 더 나쁘다"는 것을 인정하지만 ... :)))

다음은 MAC(ki) ek에서 신호를 수신하는 기능의 대체 버전입니다.

 //IIIIIIIIIIIIIIIIIII==================CONSTANS=================IIIIIIIIIIIIIIIIIIIIII+
#define       BULL           0
#define       BEAR           1
#define       STOP         - 1
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
extern int     Use_ChangeTrend.MA      = 0 ;           // 0 - off; Брать сигнал на смене тренда: 
//1 - ТОЛЬКО на первом; 2 - ТОЛЬКО не на первом; 3 - на всех
extern double MA_K_Period             = 3.0 ;         // коэффициент получения периода 2-ой МАшки.
extern int     MA_Period               = 14 ;
/*extern*/ int     MA_Shift                = 0 ;
extern int     MA_Method               = 7 ;
extern int     MA_Price                = 7 ;
/*extern*/ int     Color_Mode               = 0 ;
int            bia_PeriodMA[ 2 ];
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем сигнал по наклону MA или по пересечению 2-х MA                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_SignalMA ( string fs_Symbol,                         // Symbol
                   int fi_TF,                               // Таймфрейм
                   double fd_Deviation = 0 ,                 // расхождение м/у МАшками
                   bool fb_ControlBeginChangeTrend = False, // Контроль начала смены тренда
                   int fi_BarSignal = 1 ,                     // Бар на котором считываем сигнал
                   int fi_VerificationBars = 1 )             // Количество баров для подтверждения сигнала
{
     static int li_preSignal = STOP;
     double lda_MA[ 2 ];
     bool    lb_twice = (MA_K_Period > 1.0 ), lb_Condition;
     int     li_BAR = fi_BarSignal, li_Trend = STOP, li_VerificationBars = 0 , li_cmd = 1 ;
//----
     //---- Если работаем с 2-мя МАшками
     if (lb_twice)
    {
         for ( int li_IND = 0 ; li_IND < 2 ; li_IND++)
        {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51" , fi_TF, bia_PeriodMA[li_IND], MA_Shift, MA_Method, MA_Price, Color_Mode, 0 , li_BAR);}
         //---- На 1-ом проверяемом баре фиксируем расхождение МАшек
         double ld_Deviation = fControl_Deviation (lda_MA, lb_Condition, li_cmd, li_Trend, fd_Deviation);
    }
     //---- Если работаем с 1-ой МАшкой
     else
    {
         for (li_IND = 0 ; li_IND < 2 ; li_IND++)
        {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51" , fi_TF, MA_Period, MA_Shift, MA_Method, MA_Price, Color_Mode, 0 , li_BAR + li_IND);}
         double ld_Price = fGet_PriceOnBar ( PRICE_TYPICAL , fs_Symbol, fi_TF, li_BAR);
         //---- На 1-ом проверяемом баре фиксируем расхождение МАшек
        ld_Deviation = fControl_Deviation (lda_MA, lb_Condition, li_cmd, li_Trend, fd_Deviation);
         if (NDD (li_cmd * (lda_MA[ 0 ] - ld_Price)) >= 0.0 ) return (STOP);
    }
     //---- Если фиксируем на баре пересечение или горизонтальное расположение МА - выходим
     if (ld_Deviation == 0.0 ) return (STOP);
     int li_cnt = 0 ;
     while (lb_Condition == true)
    {
        li_BAR++;
         //---- Собираем показания МАшек в массив
         if (lb_twice)
        {
             for (li_IND = 0 ; li_IND < 2 ; li_IND++)
            {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51" , fi_TF, bia_PeriodMA[li_IND], MA_Shift, MA_Method, MA_Price, Color_Mode, 0 , li_BAR);}
             bool lb_AddCondition = true;
            li_cnt++;
        }
         else
        {
             for (li_IND = 0 ; li_IND < 2 ; li_IND++)
            {lda_MA[li_IND] = iCustom (fs_Symbol, fi_TF, "AllAverages_v2.51" , fi_TF, MA_Period, MA_Shift, MA_Method, MA_Price, Color_Mode, 0 , li_BAR + li_IND);}
            ld_Price = fGet_PriceOnBar ( PRICE_TYPICAL , fs_Symbol, fi_TF, li_BAR);
            lb_AddCondition = (NDD (li_cmd * (lda_MA[ 0 ] - ld_Price)) < 0.0 );
        }
         //---- Фиксируем расхождение МАшек или наклон 1-ой МА
        ld_Deviation = NDD (lda_MA[ 0 ] - lda_MA[ 1 ]);
         //---- Определяем условия контроля пересечения МАшек или изменение наклона
         if (li_Trend == BULL) lb_Condition = (ld_Deviation >= 0.0 ); else lb_Condition = (ld_Deviation <= 0.0 );
         //---- Производим подсчёт баров, на которых выполняется означенное расхождение
         if (lb_AddCondition)
        {
             if (fd_Deviation != 0.0 ) { if ( MathAbs (ld_Deviation) >= fd_Deviation) li_VerificationBars++;}
             else li_VerificationBars++;
        }
         else li_cnt++;
         //---- Если не отслеживаем начало смены тренда
         if (!fb_ControlBeginChangeTrend) { if (li_VerificationBars == fi_VerificationBars) return (li_Trend);}
         else
        {
             //---- Если баров, на которых выполняются заданные нами условия, > fi_VerificationBars - выходим
             if (li_VerificationBars > fi_VerificationBars) {li_preSignal = STOP; return (STOP);}
             else if (!lb_Condition)
            {
                 if (li_VerificationBars == fi_VerificationBars) { return (li_Trend);}
                 //---- Если не набрали нужное количество подтверждений сиганала после пересечения
                // или смены наклона - выходим
                 else if (li_VerificationBars < fi_VerificationBars) return (STOP);
            }
        }
         //---- Предусматриваем уход от зацикливания (на начале отсчёта)
         if (li_cnt > MA_Period) return (STOP);
    }
//----
     return (STOP);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Контролируем расхождение 2-ух МАшек или наклон 1-ой МАшки                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fControl_Deviation ( double ar_MA[],           // массив входящих значений
                           bool & fb_Condition,       // состояние тренда
                           int & fi_cmd,               // "знак тренда"
                           int & fi_Trend,             // тренд
                           double fd_Deviation = 0 )   // расхождение м\у МАшками
{
     double ld_Deviation = NDD (ar_MA[ 0 ] - ar_MA[ 1 ]);
//----
     //---- Если фиксируем на баре пересечение или горизонтальное расположение МА - выходим
     if (ld_Deviation == 0.0 ) return ( 0.0 );
     //---- Проверяем расхождение на нужную величину (если задано)
     if (fd_Deviation != 0.0 ) { if ( MathAbs (ld_Deviation) < fd_Deviation) return ( 0.0 );}
     if (ld_Deviation > 0.0 ) {fb_Condition = (ld_Deviation >= 0.0 ); fi_Trend = BULL;}
     else {fb_Condition = (ld_Deviation <= 0.0 ); fi_Trend = BEAR; fi_cmd = - 1 ;}
//----
     return (ld_Deviation);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+

주석에서 알 수 있듯이 신호는 1 MA의 기울기(MA_K_Period <= 1.0일 때) 또는 2 MA의 교집합(MA_K_Period > 1.0일 때)으로 얻을 수 있습니다. 두 번째 Mashka의 기간은 이 함수 외부에서 독립적으로 계산됩니다.

    bia_PeriodMA[ 0 ] = MA_Period;
    bia_PeriodMA[ 1 ] = MA_Period * MA_K_Period;

함수에서 2 Mashka의 발산 조건을 설정할 수도 있습니다(fd_Deviation > 0.0의 경우). 교차 사실을 추적하거나(fb_ControlBeginChangeTrend = TRUE) 단순히 서로 상대적인 Fast 및 Slow의 위치를 수정할 수도 있습니다.

이 코드가 어떻게 작동하는지 보기 위해 이 함수의 신호를 기반으로 화살표를 그리는 표시기를 아카이브에 넣었습니다. Signal_MA.tpl 템플릿(MA 1개용) 또는 Signal_MA2.tpl(MA 2개용)을 통해 시작합니다. 그건 그렇고, Mashki는 다르게 걸릴 수 있습니다.

파일:
signal_ma.zip  185 kb
 
TarasBY :

다음은 MAC(ki) ek에서 신호를 수신하는 기능의 대체 버전입니다.

주석에서 알 수 있듯이 신호는 1 MA의 기울기(MA_K_Period <= 1.0일 때) 또는 2 MA의 교집합(MA_K_Period > 1.0일 때)으로 얻을 수 있습니다. 두 번째 Mashka의 기간은 이 함수 외부에서 독립적으로 계산됩니다.

함수에서 2 Mashka의 발산 조건을 설정할 수도 있습니다(fd_Deviation > 0.0의 경우). 교차 사실을 추적하거나(fb_ControlBeginChangeTrend = TRUE) 단순히 서로 상대적인 Fast 및 Slow의 위치를 수정할 수도 있습니다.

이 코드가 어떻게 작동하는지 보기 위해 이 함수의 신호를 기반으로 화살표를 그리는 표시기를 아카이브에 넣었습니다. 그건 그렇고, Mashki는 다르게 걸릴 수 있습니다.


표시기의 속도를 높이려면 다음으로 문의하십시오.
 
Vinin :

표시기의 속도를 높이려면 다음으로 문의하십시오.
지표라면 무엇입니까? - 어떤 Mashki가 중요합니까? 어쨌든 흥미로울 것입니다!
 

안녕하세요! 주문 수정 - 오류 4051. 한 시간 동안 고민했습니다. 음, 매개 변수가 올바른 것 같습니다 !!! 한마디로 말 그대로. price 매개변수는 기본적으로 주문 개시 가격OrderOpenPrice ()입니다.

우리는 주문의 시작 가격보다 10포인트 낮은 스탑을 나르고 가격을 잊어버렸습니다. 주문을 열 때 tsena 변수에 기억됩니다.

두 가지 주문이 있습니다. 하나는 이익이 있고 다른 하나는 이익이 없습니다. 여기에서는 분명한 것 같습니다. 어디에서 오류가 발생합니까? 그에게 또 어떤 것이 있습니까?

예, 더 이상 관련이 없지만 조건이 명확한 것 같습니다. 즉, 가격은 30포인트가 되었습니다 - 조건이 작동했습니다.( tsena+ 30 * Point ).

한 번 착용 perenos=true; 이러한 조건은 실제로 작동하는 것 같습니다.

나는 나 자신을 어떻게 생각해야 할지 모르겠다.

실제로 한 번 착용 perenos=true; 이러한 조건은 준수할 필요가 없었습니다. 아무데도 입지 않습니다.


 bool napravlenieCCI=false;
 if ( CCI_50S< 100 &&CCI_50> 100 ||CCI_50S< 0 &&CCI_50> 0 || CCI_50S<- 100 &&CCI_50>- 100   )napravlenieCCI=true; // if( CCI_50S>CCI_50&& )napravlenieCCI=false;
 
 bool wishseLMA=false; //Свеча закрывается или находится выше LMA
 if (Bid>LMA_100) wishseLMA=true; Print ( "до условияsrabotka    " ,srabotka ); Alert ( "до условияsrabotka    " ,srabotka );
 
 if (EMA_20S>EMA_10S&&EMA_20<EMA_10&&napravlenieCCI&&wishseLMA&&!srabotka) { /// нашли пирисечение сверху вниз и направление CCI вверх
 RefreshRates ();
           int tacket= OrderSend ( Symbol ( ), OP_BUY, lot, NormalizeDouble (Ask, Digits ), 5 , NormalizeDouble ( Ask- ( 35 * Point ), Digits ), 
           NormalizeDouble ( Ask+( 45 * Point ), Digits ), NULL , 450 , 0 , CLR_NONE );
           int Error= GetLastError (); if (Error== 0 ){  
           Sleep ( 2000 ); RefreshRates (); double profit = NormalizeDouble ( Ask+( 45 * Point ), Digits ); tsena=Ask; perenos = false;
           int tucket= OrderSend ( Symbol ( ), OP_BUY, lot, NormalizeDouble (Ask, Digits ), 5 , NormalizeDouble ( Ask- ( 35 * Point ), Digits ),
           0 , NULL , 450 , 0 , CLR_NONE ); 
           if (Error== 0 )   
           srabotka= true; }}
           
           if (Error!= 0 ){ string errorcomment = "Ошибка открытия  ордера OP_BUY"   + " " + Symbol () +   " " + ErrorDescript(Error); 
             Print (errorcomment);}
 
 
 if (tsena+ 30 * Point <Ask&&!perenos){ 
 OrderModify (  tacket, OrderOpenPrice (), tsena- 10 * Point , OrderTakeProfit (), 0 , CLR_NONE );
 Error= GetLastError (); if (Error== 0 ){  
 OrderModify (  tucket, OrderOpenPrice (), tsena- 10 * Point , OrderTakeProfit (), 0 , CLR_NONE );
 Error= GetLastError (); if (Error== 0 ){  
 perenos=true;}}} 
 
 if (Error!= 0 ){  errorcomment = "Ошибка модификайции ордера OP_BUY"   + " " + Symbol () +   " " + ErrorDescript(Error); 
             Print (errorcomment);BreakPoint();} 
 

실제로 또 다른 중요한 매개변수 티켓이 있습니다. 그러나 inttacket=OrderSend와 같은 변수에 할당하고 int tucket=OrderSend와 같은 변수에 할당합니다.

그리고 그에 따라 OrderModify(tacket)를 사용합니다. 간단히 말해서 공식적으로는 오류가 보이지 않습니다 !!!

 

젠장... 2012.11.14 22:40:17 2012.08.16 15:30 vasilyprr EURGBP,M30: 1Error 0 Tacket 5 즉, 주문이 열렸고 티켓이 할당되었습니다.

그리고 조금 더 나아가 그것은 이미 0과 같습니다! 즉, 수정 중인 코드의 다음 섹션 내부입니다.

2012.11.14 23:05:27 2012.08.17 11:03 vasilyprr EURGBP,M30: 타켓 0 OrderOpenPrice() 0.7845 tsena-10*Point 0.7835 OrderTakeProfit() 0.789

위에 표시된 코드 섹션 외부에서는 변수가 전혀 재생되지 않습니다!

어떤 키 조합으로도 우크라이나어 레이아웃을 변경할 수 없지만 러시아어로 작성되었습니다!

 
Dimka-novitsek :

실제로 또 다른 중요한 매개변수 티켓이 있습니다. 그러나 inttacket=OrderSend와 같은 변수에 할당하고 int tucket=OrderSend와 같은 변수에 할당합니다.

그리고 그에 따라 OrderModify(tacket)를 사용합니다. 간단히 말해서 공식적으로는 오류가 보이지 않습니다 !!!


분명히 DC는 SL 및 TP를 즉시 수락하지 않습니다. 개봉 후에는 ST와 TP를 수정하십시오. 그리고 두 번째 위치는 다음 틱과 함께 즉시 열리지 않아야 합니다!
 
네 감사합니다. 그러나 미끄러짐이 있으며 일반적으로 열립니다. 따로 수정해 볼까 하다가 그만 들고 가는데 그냥 멈춤?