결론은 다음과 같습니다. 어레이를 0으로 재설정하고 주문 및 위치의 현재 상태로 다시 채워야 합니다. 그러나 계정 의 주문 또는 위치 수가 변경되었다는 사실을 파악한 경우에만 이 작업을 수행해야 합니다.
항상 현재 주문 및 위치의 현재 상태만 사용할 수 있으며 어레이에서 존재하지 않는 주문/위치를 삭제하여 춤을 만들 필요가 없습니다. 그리고 주문/포지션 목록은 완전히 스크롤되거나 주어진 기록 깊이 간격만큼 스크롤되어야 하지만 계정의 주문/포지션 수를 변경하는 특정 경우에만 가능합니다.
Print() 함수 에 대한 질문 ; 어떻게 Print()가 EA와 date(day)의 데이터를 인쇄하도록 합니까? 그것을 해결하는 방법? pliz는 초보자를 이해하는 데 도움이됩니다. 나는 실험을 위해 재 작업 한 코드를 게시합니다. 칠면조는 사전에 ATP를 "피벗"합니다!
그리고 당신은 당신의 코드의 일부를 보여주지 않았습니다 - 무엇의 예를 보여줄지 명확하지 않습니다.
struct p{
double trailingProfit;
int orders[10];
bool flagOpen;// флаг , указывающий на открытость позиции
//тут еще куча связанных параметров
};
p order[];
int OrderN=-1;
int OnInit()
{
ArrayResize(pair,1,1000);
return(INIT_SUCCEEDED);
}
void openOrder(price){
OrderN++;
int t;
ArrayResize(orders,order+1);
t=OrderSend(Symbol(),OP_BUYSTOP,2,(NormalizeDouble(price,Digits)),3,0,0,"pair",MAGICN,0,Blue);
if(t==0) Print("не удалось выставить ордер BUYSTOP ", price);
for(intj=0,j<10,++j){
if(orders[OrderN].orders==0) orders[OrderN].orders=t;
break;
}
orders[OrderN].flagOpen=1;
}
//...... тут идет обработка позиций...
void massCut(){
// нужна вот такая функция
}
EA가 다시 시작되면 구조 배열은 어떻게 됩니까?
EA가 다시 시작되면 구조 배열은 어떻게 됩니까?
어레이가 날아갈 것이고 이 문제는 해결되지 않습니다.
투표. 그리고 그것이 가장 먼저 생각한 것이었습니다.
결론은 다음과 같습니다. 어레이를 0으로 재설정하고 주문 및 위치의 현재 상태로 다시 채워야 합니다. 그러나 계정 의 주문 또는 위치 수가 변경되었다는 사실을 파악한 경우에만 이 작업을 수행해야 합니다.
항상 현재 주문 및 위치의 현재 상태만 사용할 수 있으며 어레이에서 존재하지 않는 주문/위치를 삭제하여 춤을 만들 필요가 없습니다. 그리고 주문/포지션 목록은 완전히 스크롤되거나 주어진 기록 깊이 간격만큼 스크롤되어야 하지만 계정의 주문/포지션 수를 변경하는 특정 경우에만 가능합니다.
왜 그런 변태인가?
OnInit가 재초기화할 때마다 회전하지 않고 정적 배열 을 하나의 인스턴스로 줄이도록 합니다. 일부 장소에서는 두 번 작성되기 때문입니다. 일반적으로 이것은 리소스 최적화입니다.
.. 글쎄, 나는 그것을 그대로 둘 것이다, 그것이 지금보다 더 쉽다.
크기를 지정하지 않고 전역 배열을 선언합니다. 함수는 크기를 ArrayResize로 설정합니다. 그리고 전 세계적으로 볼 수 있고 OnInit가 해제됩니다...
정확하지 않습니다. 아마도 명확하게 정의된 값이 있는 정적 배열은 별도로 초기화하는 것이 의미가 없을 것입니다(
OnInit가 재초기화할 때마다 회전하지 않고 정적 배열 을 하나의 인스턴스로 줄이도록 합니다. 일부 장소에서는 두 번 작성되기 때문입니다. 일반적으로 이것은 리소스 최적화입니다.
.. 글쎄, 나는 그것을 그대로 둘 것이다, 그것이 지금보다 더 쉽다.
그리고 MT4 테스터에서는 커미션이 고려되지 않거나 무엇입니까?
Print() 함수 에 대한 질문 ; 어떻게 Print()가 EA와 date(day)의 데이터를 인쇄하도록 합니까? 그것을 해결하는 방법? pliz는 초보자를 이해하는 데 도움이됩니다. 나는 실험을 위해 재 작업 한 코드를 게시합니다. 칠면조는 사전에 ATP를 "피벗"합니다!
코드 자체: PivotsDaily v2.mq4
#속성 표시기_차트_창
#속성 표시기_버퍼 3
#property indicator_color1 라임
#property indicator_color2 파란색
#property indicator_color3 빨간색
//---- 입력 매개변수
외부 정수 CountBars=300;
//---- 버퍼
이중 PBuffer[];
이중 S1Buffer[];
이중 R1Buffer[];
문자열 피벗 = "P", Sup1 = "S 1", Res1 = "R 1";
int 글꼴 크기 = 10;
이중 P,S1,R1,S2,R2,S3,R3;
이중 LastHigh, LastLow, x;
//+----------------------------------------------- --------------------+
//| 고객 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
ObjectDelete("피벗");
ObjectDelete("S1");
ObjectDelete("R1");
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
문자열 short_name;
표시 버퍼(7);
//---- 표시줄
SetIndexStyle(0,DRAW_ARROW,2,1,라임);
SetIndexArrow(0.158);
SetIndexStyle(1,DRAW_ARROW,2,1,파란색);
SetIndexArrow(1,158);
SetIndexStyle(2,DRAW_ARROW,2,1,빨강);
SetIndexArrow(2,158);
SetIndexBuffer(0,PBuffer);
SetIndexBuffer(1,S1Buffer);
SetIndexBuffer(2,R1Buffer);
//---- DataWindow의 이름 및 표시기 하위 창 레이블
short_name="피벗";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
short_name="R1";
IndicatorShortName(short_name);
SetIndexLabel(2,short_name);
short_name="S1";
IndicatorShortName(short_name);
SetIndexLabel(1,short_name);
SetIndexDrawBegin(0,6);
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
int counted_bars=IndicatorCounted();
정수 한계, 나는;
//---- 지표 계산
if (counted_bars==0)
{
x=마침표();
if (x>CountBars) return(-1);
ObjectCreate("피벗", OBJ_TEXT, 0, 0,0);
ObjectSetText("피벗", "피벗",10,"Arial",Lime);
ObjectCreate("S1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("S1", "S1",10,"Arial",Blue);
ObjectCreate("R1", OBJ_TEXT, 0, 0, 0);
ObjectSetText("R1", "R1",10,"Arial",빨간색);
}
if(counted_bars<0) return(-1);
제한=(막대 개수 계산된 막대)-1;
(i=한계, i>=0, i--)
{
if (TimeDayOfWeek(시간[i]) != 0)
{
if (High[i+1]>LastHigh) LastHigh=높음[i+1];
if (낮음[i+1]<LastLow) LastLow=낮음[i+1];
}
만약 (
TimeDay(시간[i])!=TimeDay(시간[i+1]) && TimeDayOfWeek(시간[i])!=0
)
{
P=닫기[i+1];
R1=최저가;
S1=마지막 높음;
S2=높음[i]-낮음[i];
S3=높음[i]-열림[i+1];
if(S3==0)
{R2 = S3;} 그렇지 않으면 {R2 = S2/S3;}
인쇄("R2",R2); // <= 인쇄 플러스 데이터가 날짜를 인쇄하게 하는 방법은 무엇입니까?
LastLow=열기[i]; LastHigh=열기[i];
ObjectMove("피벗", 0, 시간[i],P);
ObjectMove("S1", 0, 시간[i],S1);
ObjectMove("R1", 0, 시간[i],R1);
}
P버퍼[i]=P;
S1버퍼[i]=S1;
R1버퍼[i]=R1;
}
//----
리턴(0);
}