안녕하세요. 저는 계속 코딩을 다루고 있습니다. 튜토리얼 섹션의 기사에서 조언자의 예를 가져와서 예제의 코드를 교체했습니다.
임의의 훈련:
거래가 표시되지 않습니다. 이유가 무엇인지, 코드를 수정하는 방법을 알려주십시오.
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 언어의 논리를 느끼기 위해 배열을 이동하는 연산자를 결정하는 것은 무엇입니까?
#속성 표시기_분리_창 #속성 표시기_버퍼 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++) {
얘들 아, 이익이없는 모든 주문을 마감하고 손실이 특정 값을 초과하는 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();
}
}
}
}
}
}
손실이 가장 큰 열린 포지션 을 찾아야 합니다. 결론은 가장 수익성이 없는 포지션보다 이익이 더 큰 포지션을 더 찾아 반대편에서 닫아야 한다는 것입니다. 누군가 이미 이 문제에 대한 경험이 있거나 이미 그러한 문제가 발생했을 수 있습니까?
안녕하세요. 저는 계속 코딩을 다루고 있습니다. 튜토리얼 섹션의 기사에서 조언자의 예를 가져와서 예제의 코드를 교체했습니다.
임의의 훈련:
거래가 표시되지 않습니다. 이유가 무엇인지, 코드를 수정하는 방법을 알려주십시오.Urain님 , 감사합니다. 저는 mql의 논리에 놀라지 않을 수 없습니다. 하지만 for(int i=1; 사용해 보면 스크립트를 단순화할 수 없습니다. 배열 방법을 알려주지 않아도 여전히 할 수 있습니다.) t 언어의 논리를 느끼기 위해 배열을 이동하는 연산자를 결정하는 것은 무엇입니까?
추신: 배열을 선언하고 예제 스크립트에서 실수로 삭제했습니다.
가격 차이. 결과적으로 - 반대로 지표의 결과가 다릅니다 ...
#속성 표시기_버퍼 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); }
오류가 업데이트되지 않은 위치를 알려주십시오. 기록은 정상적으로 표시되지만 온라인은 표시되지 않습니다.
안녕하세요. 배열이 선언 되고 배열 인덱스를 이동하는 연산자가 설정되고 주문이 수행되지 않습니다. 무슨 일이야.
OrderSend 가 등록을 시도하면 모든 것이 밝혀질 것입니다 ...
MetaEditore의 표준 도움말을 읽으셨습니까? 그렇지 않다면 전체를 읽으십시오 ...
안녕하세요. 배열이 선언되고 배열 인덱스를 이동하는 연산자가 설정되고 주문이 수행되지 않습니다. 무슨 일이야.
손실이 가장 큰 열린 포지션 을 찾아야 합니다.
결론은 가장 수익성이 없는 포지션보다 이익이 더 큰 포지션을 더 찾아 반대편에서 닫아야 한다는 것입니다.
누군가 이미 이 문제에 대한 경험이 있거나 이미 그러한 문제가 발생했을 수 있습니까?
OrderSend가 등록을 시도하면 모든 것이 밝혀집니다 ...
MetaEditore의 표준 도움말을 읽으셨습니까? 그렇지 않다면 전체를 읽으십시오 ...
어린 시절부터 도움을 청하지 않고 질문을 던지며 Yandex는 성장했습니다. Sendov 바다, 그러나 위치는 열리지 않습니다: