주문을 마감하려고 할 때 EURUSD 차트에서 ea를 실행하고 있다고 가정합니다. 해당 위치가 닫혀 있기 때문에 괜찮습니다. 귀하의 코드가 USDCHF(약간의 난해함?) 위치를 닫으려 할 때 잘못된 입찰가 및/또는 요청을 사용하여 위치를 지정하려고 할 때 사용하는 종료 가격은 위치 기호의 가격이 아니라 ea가 너무 붙어 있는 통화 쌍 에서입니다. 차트에서 해당 통화와 일치하지 않는 다른 통화 쌍을 닫으려는 경우 닫으려고 시도하기 전에 먼저 정확한 가격을 검색해야 합니다.
킷
편집: 또한 통화(이 경우 USDCHF)는 주문을 마감하기 위해 올바른 견적을 검색할 때 시장 감시 창에 표시되어야 합니다. USDCHF가 시장 감시 창에 나열되지 않으면 해당 쌍에 대한 견적을 얻을 수 없습니다.
컴파일 오류
안녕하세요 여러분
다음 오류가 있습니다.
'<'-비교에서 다른 유형
다음 줄을 수정하려고합니다.
(NonLagMA_2D_S2&&D_S2Switch==1)
에게
(가격_지금D_S2&&D_S2스위치==1)
어디에 문제가 있습니까?
죄송합니다. mql 파일을 업로드할 수 없습니다. 내 대본이 아니야
안녕하세요 여러분
다음 오류가 있습니다.
'<'-비교에서 다른 유형
다음 줄을 수정하려고합니다.
(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); 부서지다;
}
}
//+----------------------------------------------- -------------------+
메시지 수정/삭제
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=시도 횟수이고 "동안"은 제외하십시오.
정말 감사합니다.
'손실 후 부지 조정'에 대한 내 코드는 도움이 필요합니다. 감사합니다.
'손실 후 로트 조정'에 대한 아래 내 코드는 테스트 중에 " 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);
}