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

 

컴파일 오류

안녕하세요 여러분

다음 오류가 있습니다.

'<'-비교에서 다른 유형

다음 줄을 수정하려고합니다.

(NonLagMA_2D_S2&&D_S2Switch==1)

에게

(가격_지금D_S2&&D_S2스위치==1)

어디에 문제가 있습니까?

죄송합니다. mql 파일을 업로드할 수 없습니다. 내 대본이 아니야

 
:: 당신은 다른 유형과 무언가를 비교하므로 정수가있는 정수, double과 double, 문자열이있는 문자열이어야합니다 ... 이와 같이 ...

인텐션

Badguy:
안녕하세요 여러분

다음 오류가 있습니다.

'<'-비교에서 다른 유형

다음 줄을 수정하려고합니다.

(NonLagMA_2D_S2&&D_S2Switch==1)

에게

(가격_지금D_S2&&D_S2스위치==1)

어디에 문제가 있습니까?

죄송합니다. mql 파일을 업로드할 수 없습니다. 내 대본이 아니야
 

매직 넘버로 여러 포지션 청산 - 도움말

모두들 안녕.

저는 mt4 프로그래밍에 익숙하지 않으며 아래는 저의 첫 번째 EA입니다. 이 EA의 목적은 동일한 매직 넘버를 기반으로 하는 모든 통화 쌍에 관계없이 모든 포지션을 청산하는 것입니다.

매직 # 8675310에서 EURUSD 및 USDCFh 2 포지션을 얻었다고 가정해 보겠습니다. 특정 이익 목표에 도달하면 이 모든 쌍을 닫을 수 있습니다.

이 EA의 문제는,

거래 개시 # 1 EURUSD (청산 가능)

열린 거래 # 2 USDCFh(닫을 수 없음)

거래 # 2를 닫을 수 없습니다.

어떤 아이디어?

감사해요

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

//| Closing_Trade_By_Magic_No_v1 .mq4 |

//| 광산 |

//| Forex 거래 소프트웨어: Forex 거래 플랫폼 MetaTrader 4 |

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

#property copyright "내"

#속성 링크 "http://www.metaquotes.net"

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

외부 정수 MagicNumber1=8675310;

extern int Profit1=10;

외부 int MagicNumber2=8675311;

extern int Profit2=15;

외부 정수 MagicNumber3=8675312;

extern int Profit3=15;

외부 정수 MagicNumber4=8675313;

extern int Profit4=15;

외부 정수 MagicNumber5=8675314;

extern int Profit5=15;

외부 정수 MagicNumber6=0;

extern int Profit6=10;

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

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

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

정수 초기화()

{

onScreenComment(98,"텐각 초기화..");

//----

//----

리턴(0);

}

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

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

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

정수 초기화()

{

//----

//----

리턴(0);

}

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

//| 전문가 시작 기능 |

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

정수 시작()

{

문자열 myMessage="";

myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,myMessage);

myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage);

myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);

myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);

myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage);

myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);

onScreenComment(98, myMessage);

//----

//----

리턴(0);

}

문자열 ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )

{

정수 합계 = OrdersTotal();

더블 MyCurrentProfit=0;

문자열 MyOrderNo="";

for (int cnt = 0 ; cnt < total ; cnt++)

{

주문 선택(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == myMagicNumber)

{

MyCurrentProfit += OrderProfit();

MyOrderNo = MyOrderNo + "," + OrderTicket();

}

}

if(MyCurrentProfit>=myProfit)

CloseAll(myMagicNumber);

myMessage="그룹 위치 번호" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;

반환(myMessage);

}

무효 CloseAll(int myMagicNumber)

{

정수 합계 = OrdersTotal();

for (int cnt = 0 ; cnt < total ; cnt++)

{

주문 선택(cnt,SELECT_BY_POS,MODE_TRADES);

if (OrderMagicNumber() == myMagicNumber)

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

OrderClose(OrderTicket(),OrderLots(),입찰가,5,바이올렛);

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

OrderClose(OrderTicket(),OrderLots( ),Ask,5,바이올렛);

}

}

무효 onScreenComment(int myEvent, 문자열 myComment)

{

스위치(myEvent)

{

사례 98: 주석(myComment); 부서지다;

}

}

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

메시지 수정/삭제

 
이 EA의 문제는,

Open Transaction # 1 EURUSD (able to close)

열린 거래 # 2 USDCFh (닫을 수 없음)

거래 # 2를 닫을 수 없습니다.

어떤 아이디어?

주문을 마감하려고 할 때 EURUSD 차트에서 ea를 실행하고 있다고 가정합니다. 해당 위치가 닫혀 있기 때문에 괜찮습니다. 귀하의 코드가 USDCHF (약간의 난해함?) 위치를 닫으려 할 때 잘못된 입찰가 및/또는 요청을 사용하여 위치를 지정하려고 할 때 사용하는 종료 가격은 위치 기호의 가격이 아니라 ea가 너무 붙어 있는 통화 쌍 에서입니다. 차트에서 해당 통화와 일치하지 않는 다른 통화 쌍을 닫으려는 경우 닫으려고 시도하기 전에 먼저 정확한 가격을 검색해야 합니다.

편집: 또한 통화(이 경우 USDCHF)는 주문을 마감하기 위해 올바른 견적을 검색할 때 시장 감시 창에 표시되어야 합니다. USDCHF가 시장 감시 창에 나열되지 않으면 해당 쌍에 대한 견적을 얻을 수 없습니다.

 

감사합니다 cockeydcowboy!.

" 폐쇄를 시도하기 전에 먼저 정확한 가격을 검색해야 합니다 ."

위의 요구 사항을 수행할 수 있는 구문이나 기능 을 공유할 수 있습니까?

 

다음 막대까지 거래하지 않는 방법

프로그래밍을 처음 시도했지만 한 가지 문제가 있습니다.

- 한 바에서 거래를 마감하면 새 바가 열릴 때만 새 거래를 열 수 있습니다.

나는 다음을 시도했다;

날짜/시간 0=0;

정수 시작()

if (time0 == Time[0]) return;

{

"프로그램 코드"

}

시간0 = 시간[0];

리턴(0);

이 비트를 꺼내면 다양한 막대에 여러 항목이 표시됩니다. 그것을 넣으면 훨씬 적은 수의 항목(백테스트에서 70개에서 4 개로 )을 얻지만 누락된 항목이 있습니다.

내가 뭘 잘못하고 있는지 아는 사람.

미리 감사드립니다.

 

아래 NewBar() 함수 를 사용할 수 있습니다.

if(NewBar(){ ........여기서 프로그래밍

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

한 번에 하나의 주문만 원하는 경우 미결 주문을 테스트할 수도 있습니다.

도움이 되기를 바랍니다.

럭스

 

럭스

도와주셔서 감사합니다.

프로그램에서 무슨 일이 일어나고 있는지 알아낸 것 같아요.

이전에 시작 시 새 막대를 확인하고 있었기 때문에 프로그램은 새 막대의 첫 번째 눈금만 확인하여 다른 눈금을 확인하지 않고 내 신호와 일치하는지 확인했습니다. 이것이 백테스트 를 통해 거래 신호가 거의 나오지 않는 이유입니다.

이제 코드를 올바르게 배치했습니다(즉, 내 주문 전송 명령이 있는 위치). 제대로 작동하는 것 같습니다.

내 생각이 맞습니까?

 

전문가 코드 업데이트를 도와주세요.

단순한 전문가가 있습니다. 코드도 명확하고 간단하지만 큰 문제가 있습니다. 전문가는 Open/Close 주문을 한 번만 시도했습니다.

누군가가 문제를 해결하는 데 도움을 줄 수 있습니까?

전문가는 주문을 열고 닫으려면 5-10번을 시도해야 합니다.

아마도 n=시도 횟수이고 "동안"은 제외하십시오.

정말 감사합니다.

파일:
test.mq4  9 kb
 

'손실 후 부지 조정'에 대한 내 코드는 도움이 필요합니다. 감사합니다.

'손실 후 로트 조정'에 대한 아래 내 코드는 테스트 중에 " ArraySort 기능 에 대한 잘못된 시작 위치 0 " 오류 메시지를 수행했습니다. 누구든지 내가 그것을 고칠 수 있도록 도와 줄 수 있습니까? 도움이 필요하다..

double AdjtLotsByWinRate( int magicnumber,double NormLots)

{

int i,counter;

int ProfitAndTime[][2];

double Profits[];

//----

ArrayResize(ProfitAndTime,OrdersHistoryTotal());

for (i=0;i<OrdersHistoryTotal();i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP

{

ProfitAndTime[counter][0]=OrderCloseTime();

ProfitAndTime[counter][1]=OrderProfit();

counter++;

}

}

}

ArrayResize(ProfitAndTime,counter);

ArrayResize(Profits,counter);

ArraySort(ProfitAndTime);

for (i=0;i<counter;i++)

{

Profits=ProfitAndTime[1];

}

//Print(Profits);

int err=GetLastError();

int WinRate_N=0,WinRate_A=5;

double WinRate;

for (i=counter;i<counter-WinRate_A+1;i--)

{

if (Profits>0){

WinRate_N=WinRate_N+1;

}

else if (Profits<0)

{

WinRate_N=WinRate_N-1;

}

else

{

WinRate_N=WinRate_N+0;

}

}

WinRate=WinRate_N/WinRate_A;

double NewLots;

if (WinRate>=0.7)

{

NewLots=NormLots*1.5;

}

else if (WinRate>=0.5 && WinRate<0.7)

{

NewLots=NormLots*1;

}

else if (WinRate>=0.3 && WinRate<0.5)

{

NewLots=NormLots*0.5;

}

else //if (WinRate<0.3)

{

NewLots=NormLots*0.1;

}

return(NewLots);

}