코딩하는 방법? - 페이지 160

 
increase:
도와줄 사람이 없는 것 같으니 응답해 주세요.

적당한 양의 추측 작업을 통해 문제는 표시기 또는 표시기에 대한 확장이며 iCustom 사용이 아님을 제안합니다. 경고와 함께 버퍼 2와 3을 할당하는 것이 더 나을까요? (하지만 인덱스 0([0]) 값이 어떻게/언제 할당되는지는 알 수 없었습니다.)

 

가격 데이터 정보

내 출구 및 진입은 다음 막대(진입 및 퇴장)의 시작 조건을 생성하는 신호를 기반으로 합니다. 지표 및 이동 평균에 대해 공개 가격을 사용해야 합니까? 저는 항상 거래 를 위해 종가 데이터를 사용했기 때문에 자연스럽게 그것이 제가 끌리게 된 것입니다. 거기에 대한 합의는 무엇입니까?

 

그냥 생각

페어 최소 스톱 레벨 에서 후행 스톱을 설정하는 방법은 스톱 레벨이 4핍 또는 25핍이면 페어에 따라 sl이 시작됩니다.

각 쌍에 대한 계약 사양을 어떻게 사용하는지 말해야 합니다.

건배

베노

 

싸이더스_바고 인디케이터

안녕하세요 증가,

Sidus_Bago를 MTF 표시기로 코딩하는 데 도움을 줄 수 있는지 궁금합니다. 이 지표도 아주 좋은 것 같아요.

싸이더스바고는 여기:

싸이더스 시스템 확인' 표시기?

매우 감사합니다.

 

누구든지 이 EA를 도와줄 수 있습니까?

안녕하세요 여러분,

나는 나의 첫 번째 EA를 가보았지만 컴파일되지 않을 것입니다. "'\end of program' - unbalanced left parenthesis" 오류가 발생하고 몇 번 시도해 보았지만 문제를 찾을 수 없습니다. 거래 전략의 논리에 대해 걱정하지 마십시오(열심하지 않는 한). 일단 컴파일되고 실행되면 작업할 것입니다...

제가 파일첨부 권한이 없는 것 같아서 잘라서 붙여넣기도 해서 죄송합니다.

감사해요,

롭,

퍼스, 호주

//---------------

//+----------------------------------------------- -------------------+

//| Rob_Ea.mq4 |

//| 롭 사촌 |

//| |

//+----------------------------------------------- -------------------+

#property copyright "롭 커즌스"

#속성 링크 ""

#define MAGICMA 20090216

//---- 입력 매개변수

extern 더블 로트;

extern int Short_MA=5;

외부 int Long_MA=15;

외부 이중 Stoch_Upper=70.0;

외부 이중 Stoch_Lower=30.0;

외부 이중 RSI_Upper=80.0;

외부 이중 RSI_Lower=20.0;

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

문자열 Current_Indication()

{

// 이동 평균 변수

이중 MA_Short;

이중 MA_Long;

문자열 Current_MA_Indicator;

문자열 Previous_MA_Indicator;

문자열 MA_Indicator;

// 확률 변수

문자열 Current_Stoch_Indicator;

문자열 Previous_Stoch_Indicator;

문자열 Stoch_Indicator;

// RSI 변수

문자열 Current_RSI_Indicator;

문자열 Previous_RSI_Indicator;

문자열 RSI_Indicator;

// --------------------------------------

// 먼저 MA를 얻고 MA Cross를 확인합니다.

// --------------------------------------

MA_Short=iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,0);

MA_Long=iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,0);

if (MA_Short>MA_Long) Current_MA_Indicator="BUY";

if (MA_Short<MA_Long) Current_MA_Indicator="SELL";

// 이동된 MA를 사용하여 이전 값과 현재 값을 설정합니다(옵션의 마지막 '1').

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)>iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="BUY";

if (iMA(NULL,0,Short_MA,0,1,PRICE_MEDIAN,1)<iMA(NULL,0,Long_MA,0,0,PRICE_MEDIAN,1)) Previous_MA_Indicator="SELL";

if ((Current_MA_Indicator=="BUY") && (Previous_MA_Indicator=="BUY")) MA_Indicator="BUY";

if ((Current_MA_Indicator=="SELL") && (Previous_MA_Indicator=="SELL")) MA_Indicator="SELL";

// ----------------------------

// 확률 지표 확인

// ----------------------------

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)>Stoch_Upper) Current_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,0)<Stoch_Lower) Current_Stoch_Indicator="판매";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)>Stoch_Upper) Previous_Stoch_Indicator="BUY";

if(iStochastic(NULL,0,6,3,3,MODE_SMA,0,MODE_MAIN,1)<Stoch_Lower) Previous_Stoch_Indicator="SELL";

if ((Current_Stoch_Indicator=="BUY") && (Previous_Stoch_Indicator=="BUY")) Stoch_Indicator="BUY";

if ((Current_Stoch_Indicator=="SELL") && (Previous_Stoch_Indicator=="SELL")) Stoch_Indicator="SELL";

// ----------------------------

// RSI 인디케이터 체크

// ----------------------------

if(iRSI(NULL,0,3,PRICE_CLOSE,0)>RSI_Upper) Current_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,0)<RSI_Lower) Current_RSI_Indicator="판매";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)>RSI_Upper) Previous_RSI_Indicator="BUY";

if(iRSI(NULL,0,3,PRICE_CLOSE,1)<RSI_Lower) Previous_RSI_Indicator="SELL";

if ((Current_RSI_Indicator=="BUY") && (Previous_RSI_Indicator=="BUY")) RSI_Indicator="BUY";

if ((Current_RSI_Indicator=="SELL") && (Previous_RSI_Indicator=="SELL")) RSI_Indicator="SELL";

//----------------------------------------

// 매수 또는 매도 상황인지 파악

//----------------------------------------

if((MA_Indicator=="BUY") && (Stoch_Indicator=="BUY") && (RSI_Indicator=="BUY") return("구매");

if((MA_Indicator=="판매") && (Stoch_Indicator=="판매") && (RSI_Indicator=="판매") return("판매");

}

//+----------------------------------------------- -------------------+

//| 오픈 포지션 계산 |

//+----------------------------------------------- -------------------+

문자열 Current_Trade(문자열 기호)

{

//----

for(int i=0;i<OrdersTotal();i++)

{

if(주문선택(i,SELECT_BY_POS,MODE_TRADES)==거짓)

{

반환("없음");

부서지다;

}

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) return("구매");

if(OrderType()==OP_SELL) return("판매");

}

}

}

//------------------------------------------------ ----------------------

// 신호의 방향이 변경된 경우 가장 먼저 할 일은 닫기입니다.

// 다른 거래를 열기 전 현재 열려 있는 거래.

//------------------------------------------------ -----------------------

무효 CloseTrade(문자열 기호)

{

// 더블 마;

//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.

// if(볼륨[0]>1) return;

//----

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단; // 열린 거래가 없습니다.

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) 계속;

//---- 주문 유형 확인

// 다르게 하고 싶은 경우를 대비하여 두 옵션 모두 잠시 남겨둡니다.

// 예를 들어 다른 색상을 가지고 있거나 무엇이든 있습니다. 그렇지 않으면 두 명령이 동일합니다.

// 하나만 필요합니다. 내가 생각하는 다른 가격을 제외하고는 ... Doh!

if(주문유형()==OP_BUY)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

부서지다;

}

if(주문 유형()==OP_SELL)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,White);

부서지다;

}

}

//----

}

//------------------------------------------------ -----------

// 찻잎이 그렇게 말하는 경우 포지션을 엽니다.

//------------------------------------------------ ----------

void OpenTrade(문자열 기호, 문자열 유형)

{

정수 해상도;

//---- 구매 조건

if(Type=="BUY") OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"ROB EA TEST",MAGICMA,0,Blue);

//---- 판매 조건

if(Type=="SELL") OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"ROB EA TEST",MAGICMA,0,Red);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

무효 시작()

{

//----

//---- 현재 기호로 미결 주문 계산

//--- 열려 있는 거래가 없으면 간단히 거래를 엽니다...

if(Current_Trade(Symbol())=="NONE") OpenTrade(Symbol(),Current_Indication());

// 그러나 열린 거래가 있는 경우 새 거래를 열기 전에 먼저 거래를 닫아야 합니다.

if ((Current_Trade(Symbol())=="BUY") && (Current_Indication()=="SELL"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

if ((Current_Trade(Symbol())=="SELL") && (Current_Indication()=="BUY"));

{

CloseTrade(Symbol());

OpenTrade(Symbol(),Current_Indication());

}

반품;

}

 

저기요..................................................

파일:
robtestea.mq4  7 kb
 

좋아, 빨랐어! 정말 감사합니다. 문제는 무엇 이었습니까?

롭.

 

파일 쓰기 문제

저는 ea witch가 파일을 사용하여 지표 값으로 거래(손실, 승리) 결과를 유지하도록 프로그래밍하고 있습니다. 따라서 EA가 거래에 들어갈 때 "sellOpenInd.tab" 파일에 거래가 이루어진 지표 및 시간 값을 씁니다.

이 작업 파일에는 다음이 포함됩니다.

CCISDivPresent 22 69 0.000024 0.000046 0.000045 -0.000015 2002.05.07 13:00

CCISDivPresent 66 85 0.000064 0.000032 0.000037 -0.000033 2002.05.15 07:00

CCISDivPresent 77 90 0.000041 -0.000029 0.000008 -0.000020 2002.06.03 08:00

etc...

In next stage i open this file and look into history for dates of opened orders then i check results of this trades and write into file "sellResults.tab"+indicators values writen in previous stage(above) .And here problem occures, only one same trade is recorded:

Rule7 Rule6 Rule5 Rule4 Rule3 Rule2 Rule1 TradeOutcome

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

-0.000015 0.000045 0.000046 0.000024 69 22 CCISDivPresent win

etc..

Here is my code(i know is not looking nice ):

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}

 

cicle의 모든 단계에서 "sellOpenInd.tab" 파일을 계속해서 엽니다 .

이 시도:

int dates=FileOpen("sellOpenInd.tab", FILE_CSV|FILE_READ,"\t");

if(dates>0){

for(k=0;k<=10;k++){ //i use for loop instead of while(!FileIsEnding(dates) ) because ea enters in infinite loop for unknown reasons

FileSeek(dates,filepos,SEEK_SET);

while (FileIsLineEnding(dates)==FALSE){filestr=FileReadString(dates)+"\t"+filestr;filepos=filepos+FileTell(dates);}

decodeFile(filestr);//calling function which decodes readed string line, then writing results to global varaiables filter7 ,filter6 etc.

Comment(filterS7);

for (i =OrdersHistoryTotal()-1; i>=0; i--) {

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);

if (OrderSymbol() == Currencies) {

if((OrderMagicNumber()==16381||OrderMagicNumber()==16383)&&OrderCloseTime()!=0){

historyDateTime=TimeToStr(OrderOpenTime());

OrderP=OrderProfit();

if(OrderP>0)orderresult="win";

if(OrderP<=0)orderresult="loss";

if(filterS7==historyDateTime) {

testFline=filterS6+"\t"+filterS5+"\t"+filterS4+"\t"+filterS3+"\t"+filterS2+"\t"+filterS1+"\t"+filterS0+"\t"+orderresult;

results=FileOpen("sellResults.tab", FILE_READ|FILE_WRITE,"\t");

FileSeek(results,0,SEEK_END);

FileWrite(results,testFline);

testFline="";

filestr="";

}

}

}

}

if(!FileIsEnding(dates)){FileClose(dates);FileClose(results);filepos=0;break;

}

}

}
 

안녕하세요 Roger09 전에 시도했지만 도움이 되지 않습니다. 포인터가 다음 줄로 이동 하지 않는 것처럼 보이지만 이유를 모르겠습니다.

어쨌든 답변 감사합니다.