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+externint Use_ChangeTrend.MA = 0 ; // 0 - off; Брать сигнал на смене тренда:
//1 - ТОЛЬКО на первом; 2 - ТОЛЬКО не на первом; 3 - на всехexterndouble MA_K_Period = 3.0 ; // коэффициент получения периода 2-ой МАшки.externint MA_Period = 14 ;
/*extern*/int MA_Shift = 0 ;
externint MA_Method = 7 ;
externint 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, // Symbolint fi_TF, // Таймфреймdouble fd_Deviation = 0 , // расхождение м/у МАшкамиbool fb_ControlBeginChangeTrend = False, // Контроль начала смены трендаint fi_BarSignal = 1 , // Бар на котором считываем сигналint fi_VerificationBars = 1 ) // Количество баров для подтверждения сигнала
{
staticint 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);}
elseif (!lb_Condition)
{
if (li_VerificationBars == fi_VerificationBars) { return (li_Trend);}
//---- Если не набрали нужное количество подтверждений сиганала после пересечения
// или смены наклона - выходимelseif (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의 기간은 이 함수 외부에서 독립적으로 계산됩니다.
함수에서 2 Mashka의 발산 조건을 설정할 수도 있습니다(fd_Deviation > 0.0의 경우). 교차 사실을 추적하거나(fb_ControlBeginChangeTrend = TRUE) 단순히 서로 상대적인 Fast 및 Slow의 위치를 수정할 수도 있습니다.
이 코드가 어떻게 작동하는지 보기 위해 이 함수의 신호를 기반으로 화살표를 그리는 표시기를 아카이브에 넣었습니다. Signal_MA.tpl 템플릿(MA 1개용) 또는 Signal_MA2.tpl(MA 2개용)을 통해 시작합니다. 그건 그렇고, Mashki는 다르게 걸릴 수 있습니다.
그는 이미 다른 스레드에서 그것에 대해 질문했습니다. 그들은 대답했습니다... 하지만 그는 코드를 이해하지 못합니다. 그는 그것에 대해 직접 썼습니다.
그는 스크립트가 필요합니다(기성 솔루션 - 키를 눌렀음(스크립트 실행) - 화면을 보았음).
남은 일은 그를 우리 계정에 투자하도록 초대하는 것뿐입니다! :))
남은 일은 그를 우리 계정에 투자하도록 초대하는 것뿐입니다! :))
좋은 아이디어지만 구현하기 어렵다
Che와 나는 이미 완전히 혼란스러워했습니다. 다음은 3가지 기능으로, 각 기능은 특정 칠면조에 대한 고유한 신호를 수신합니다.
이 함수는 모든 칠면조로부터 공통 신호를 받아 BUY 또는 SELL 을 결정합니다.
그리고 이것은 일반 신호를 얻는 주요 기능입니다. 여기에서 모든 막대를 통과하는 루프를 통해 칠면조 값을 얻습니다. 기능:
int GetCrossingMa(더블& i_maFast1, 더블& i_maFast2, 더블& i_maSlow1, 더블& i_maSlow2)
int GetStochSignal(더블& stochD1, 더블& stochD2, 더블& stochK1, 더블& stochK2)
void GetMomentumSignal() , 원칙적으로 거기에 밀어 넣을 수도 있습니다.
따라서 칠면조의 모든 계산은 신호를 수신하는 하나의 주요 기능에 있음이 밝혀졌습니다. 여기에서는 모든 것이 논리적입니다.
승리자! 당신은 논리가 있지만 지식은 여전히 충분하지 않습니다. 첫째, 이 사업을 포기하지 않는다면 교과서를 뛰어넘는 데 도움이 되겠지만, 둘째를 '승리'하기 위해서는 당분간 (교과서부터) 시작해야 한다. 논리적 코드 구조를 구축할 준비가 되지 않았습니다(아직). 알파벳 버전으로 돌아가십시오.
추신: 귀하의 코드에서 "눈에 띄는" 것은 무엇입니까?
GetSignal() 함수에서 for 루프는 두 줄의 교차점을 찾는 데 사용할 수 있지만 개인 취향이지만 while 루프 가 더 좋습니다. 그리고 우선 "실행, 용서할 수 없습니다."와 같이 코드가 음성을 실행하려면 괄호를 이동해야 합니다. 어떤 이유로 이 (결과) 함수는 GetStochSignal() 및 GetMomentumSignal()의 두 함수 결과를 포함하지 않습니다. 이것은 LITTLE 비트 비논리적입니다.
GetCrossingMa() 및 GetStochSignal() 함수에는 참조로 매개변수를 전달할 필요가 없습니다. 함수 내부의 이러한 변수가 값을 변경하면 의미가 있기 때문입니다.
void GetMomentumSignal() 함수는 아무것도 반환하지 않습니다.
측면에서 "보기가 더 나쁘다"는 것을 인정하지만 ... :)))
다음은 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의 위치를 수정할 수도 있습니다.
이 코드가 어떻게 작동하는지 보기 위해 이 함수의 신호를 기반으로 화살표를 그리는 표시기를 아카이브에 넣었습니다. Signal_MA.tpl 템플릿(MA 1개용) 또는 Signal_MA2.tpl(MA 2개용)을 통해 시작합니다. 그건 그렇고, Mashki는 다르게 걸릴 수 있습니다.
다음은 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는 다르게 걸릴 수 있습니다.
표시기의 속도를 높이려면 다음으로 문의하십시오.
표시기의 속도를 높이려면 다음으로 문의하십시오.
안녕하세요! 주문 수정 - 오류 4051. 한 시간 동안 고민했습니다. 음, 매개 변수가 올바른 것 같습니다 !!! 한마디로 말 그대로. price 매개변수는 기본적으로 주문 개시 가격 인 OrderOpenPrice ()입니다.
우리는 주문의 시작 가격보다 10포인트 낮은 스탑을 나르고 가격을 잊어버렸습니다. 주문을 열 때 tsena 변수에 기억됩니다.
두 가지 주문이 있습니다. 하나는 이익이 있고 다른 하나는 이익이 없습니다. 여기에서는 분명한 것 같습니다. 어디에서 오류가 발생합니까? 그에게 또 어떤 것이 있습니까?
예, 더 이상 관련이 없지만 조건이 명확한 것 같습니다. 즉, 가격은 30포인트가 되었습니다 - 조건이 작동했습니다.( tsena+ 30 * Point ).
한 번 착용 perenos=true; 이러한 조건은 실제로 작동하는 것 같습니다.
나는 나 자신을 어떻게 생각해야 할지 모르겠다.
실제로 한 번 착용 perenos=true; 이러한 조건은 준수할 필요가 없었습니다. 아무데도 입지 않습니다.
실제로 또 다른 중요한 매개변수 티켓이 있습니다. 그러나 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
위에 표시된 코드 섹션 외부에서는 변수가 전혀 재생되지 않습니다!
어떤 키 조합으로도 우크라이나어 레이아웃을 변경할 수 없지만 러시아어로 작성되었습니다!
실제로 또 다른 중요한 매개변수 티켓이 있습니다. 그러나 inttacket=OrderSend와 같은 변수에 할당하고 int tucket=OrderSend와 같은 변수에 할당합니다.
그리고 그에 따라 OrderModify(tacket)를 사용합니다. 간단히 말해서 공식적으로는 오류가 보이지 않습니다 !!!
분명히 DC는 SL 및 TP를 즉시 수락하지 않습니다. 개봉 후에는 ST와 TP를 수정하십시오. 그리고 두 번째 위치는 다음 틱과 함께 즉시 열리지 않아야 합니다!