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

 
mladen:

안녕 Mladen, 당신의 도움에 감사드립니다. 당신의 변경 사항을 적용했지만 실제로 작동하지 않습니다. EA가 기존 공개 거래를 무시하면 더 간단할 것입니다.

현재 자체 거래를 열고 닫지만 기존의 추가 열린 거래도 닫습니다.

 

증가하다

내가 제안할 수 있는 부분적인 코드에서. Boolean 매개변수 NoCloses 가 생성되고 해당 매개변수가 true로 설정된 경우 스니펫처럼 적용되는 경우 주문을 마감해서는 안 됩니다( CBCS 가 1이 아닌 경우 해당 코드는 주문을 마감하지 않음).

문안 인사

믈라덴

increase:
안녕 Mladen, 당신의 도움에 감사드립니다. 당신의 변경 사항을 적용했지만 실제로 작동하지 않습니다. EA가 기존 공개 거래를 무시하면 더 간단할 것입니다. 현재 자체 거래를 열고 닫지만 기존의 추가 열린 거래도 닫습니다.
 
mladen:
증가하다

내가 제안할 수 있는 부분적인 코드에서. Boolean 매개변수 NoCloses 가 생성되고 해당 매개변수가 true로 설정된 경우 스니펫처럼 적용되는 경우 주문을 마감해서는 안 됩니다( CBCS 가 1이 아닌 경우 해당 코드는 주문을 마감하지 않음).

문안 인사

믈라덴

그것은 사실이지만 내가 잘못 이해하지 않는 한 EA에서 열린 거래도 닫히지 않으므로 매수와 매도 사이에서 전환된다는 것을 의미합니까?

 

네. 맞아요

내가 이해하는 한 그것은 당신의 아이디어였습니다: EA가 주문을 열도록 한 다음 주문을 수동으로 관리(닫기)하게 하는 것입니다. 이 매개변수 를 사용하면 다시 false로 전환할 수도 있습니다. 그러면 EA가 주문 마감을 재개합니다. 따라서 "외부에서 제어 가능"합니다.

increase:
그것은 사실이지만 내가 잘못 이해하지 않는 한 EA에서 열린 거래도 닫히지 않으므로 매수와 매도 사이에서 전환된다는 것을 의미합니까?
 
mladen:
네. 그것이 맞습니다. 제가 이해한 한 그것은 당신의 아이디어였습니다: EA가 주문을 열도록 한 다음 주문을 수동으로 관리(닫기)하게 하는 것입니다. 이 매개변수를 사용하면 다시 false로 전환할 수도 있습니다. 그러면 EA가 주문 마감을 재개합니다. 따라서 "외부에서 제어 가능"합니다.

아 죄송합니다 제가 모호했습니다. EA가 주문을 열고 닫고 기존 주문을 무시하기를 원합니다. 예를 들어

1. 5개의 판매 주문 이 열려 있습니다.

2. EA를 적용하면 1개의 구매 주문이 열립니다.

3. 이제 5개의 매도와 1개의 매수가 있습니다.

4. EA는 이제 매도를 시작하여 매수를 마감합니다.

5. 현재 6개 판매(기존 5개, EA 1개 판매) 주문이 있습니다.

6. EA는 이제 매수를 유발하여 매도를 마감합니다.

7. 이제 5개의 매도와 1개의 매수가 있습니다.

나는 기존 판매를 닫을 것입니다. EA는 위와 같이 자체 거래를 제외한 다른 거래를 무시합니다.

 

증가하다

Magic 매개변수 를 0 이외의 값으로 설정하면 이미 수행됩니다(이는 주문 마감 직전에 구매 주문을 마감해야 하는지 확인하는 코드의 일부입니다)

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

따라서 " Magic "이 0이 아니고 Magic 값이 고유한 경우 자체적으로 열린 주문만 닫힙니다.

increase:
아 죄송합니다 제가 모호했습니다. EA가 주문을 열고 닫고 기존 주문을 무시하기를 원합니다. 예를 들어

1. 5개의 판매 주문이 열려 있습니다.

2. EA를 적용하면 1개의 구매 주문이 열립니다.

3. 이제 5개의 매도와 1개의 매수가 있습니다.

4. EA는 이제 매도를 시작하여 매수를 마감합니다.

5. 현재 6개(기존 5개, 1개 EA 판매) 주문이 있습니다.

6. EA는 이제 매수를 유발하여 매도를 마감합니다.

7. 이제 5개의 매도와 1개의 매수가 있습니다.

나는 기존 판매를 닫을 것입니다. EA는 위와 같이 자체 거래를 제외한 다른 거래를 무시합니다.
 

특정 TimeFrame에 대해 OncePerBar 거래

안녕하세요, 친애하는 FELLA's!

테스터에서 잘 작동하는 EA(예, 그렇지 않은 사람)가 있으며 지침에 따라 4H Bar당 여러 거래를 수행합니다. 이제 11쌍으로 데모(Alpari UK)에서 테스트할 때 EA는 1개의 거래만 필요로 하는 반면 더 많은 거래가 필요합니다(지시된 대로 최대 3개). 조건이 충족되는 경우 4H 막대마다만.

1개의 미리 정의된 TimeFrame(이 경우 4H) 내에서 여러 주문이 열리는 것을 방지하기 위해 GlobalVariable이 코딩된 'Semaphor' 기능 과 이 코드가 있습니다.

//구입하다

if (주문 == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (막대 != BarCount)))

{

if(신호 전용)

{

// ------ 경고는 신호당 한 번 또는 15분 또는 30분마다 한 번이어야 합니다.

if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);

그렇지 않으면 CheckAlertTime = iTime(NULL, 5, 0);

if (경고) 경보 (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY 신호");

if (PlaySounds) PlaySound (WhichSound);

}

if (!IsTrade && !SignalsOnly)

{

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

else CheckAlertTime = iTime(NULL, OncePerBarTF, 0);

// 여유 여백 확인

if (AccountFreeMargin() < (1000 * 랏))

{

Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());

반환(0);

}

if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = 묻기 + TakeProfit * 포인트; 그렇지 않으면 TakeProfitLevel = 0.0;

{

if (MoneyManagement) 랏 = NormalizeDouble ((AccountFreeMargin() * 위험 / 100 / ((Ask - BuySL) / Point / TickValue)), 2);

else 제비 = 제비;

}

if (TradeIsBusy() && IsTradingAllowed() < 0)

리턴(-1);

새로 고침 비율();

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY" + MagicNo, MagicNo, 0, DodgerBlue);

if (티켓 > 0)

{

if (OrderSelect(티켓, SELECT_BY_TICKET, MODE_TRADES))

{

인쇄("7Qi BUY 열림: ", OrderOpenPrice());

if (경고) 경보 (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY 열림");

if (PlaySounds) PlaySound (WhichSound);

}

또 다른

{

인쇄("구매 열기 오류: ", 오류);

}

}

// TradedThisBar = 바;

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = 막대;

TradeIsNotBusy();

리턴(0);

}

}

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

이 코드가 다음과 같을 수 있습니까?

if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);

else CheckAlertTime = iTime(NULL, OncePerBarTF, 0);

EA가 시간 중반에 거래하는 것을 방지합니까? Bar의 시작 부분에서만 확인합니까?

"TradedThisBar = Bars" 기능을 사용하면 EA를 1 TimeFrame에만 남겨야 합니다. 맞습니까?

'Semaphor' 기능은 TrailingStops에서도, PartialCloseLots에서도 코딩됩니다.

도움을 주신 모든 분들께 감사드립니다.

즐거운 시간 보내세요,

시몬

슬로베니아

 

Iiiiiiiik - 문제를 찾았습니다.

안녕!

문제를 찾았습니다. 아마도 다음과 같은 조합일 것입니다.

if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)

리턴(-1);

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

int IsTradingAllowed(int MaxWaitingSec = 30)

{

if (!IsTradeAllowed())

{

int StartWaitingTime = GetTickCount();

Print("거래 컨텍스트가 사용 중입니다! 비어 있을 때까지 기다리세요...");

if (Alerts) Alert (Symbol() + " EA 거래가 허용되지 않습니다! 대기 중...");

동안 (사실)

{

if (IStopped())

{

인쇄("EA가 종료되었습니다!");

리턴(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )

{

Print( "대기 제한 초과(" + MaxWaitingSec + " 초)!" );

리턴(-2);

}

if (IsTradeAllowed())

{

인쇄("무역 컨텍스트는 이제 무료입니다!");

리턴(0);

}

수면(100);

}

}

또 다른

{

인쇄("무역 컨텍스트는 무료입니다!");

반환(1);

}

}

*/

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

int TradeIsBusy (int MaxWaitingSec = 30)

{

if (IsTesting()) return(1);

정수 오류 = 0, StartWaitingTime = GetTickCount();

동안 (사실)

{

if (IStopped())

{

인쇄("EA가 종료되었습니다!");

리턴(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print("대기 시간(" + MaxWaitingSec + " 초)을 초과했습니다!");

if (Alerts) Alert (Symbol() + " EA 대기 시간이 초과되었습니다!");

리턴(-2);

}

if(GlobalVariableCheck("TradeIsBusy"))

부서지다;

또 다른

{

오류 = GetLastError();

만약 (에러 != 0)

{

인쇄("TradeIsBusy - GlobalVariableCheck - 오류 번호 ", 오류);

수면(100);

계속하다;

}

}

if (GlobalVariableSet("TradeIsBusy", 1.0) > 0) return(1);

또 다른

{

오류 = GetLastError();

만약 (에러 != 0)

{

인쇄("TradeIsBusy - GlobalVariableSet - 오류 번호 ", 오류);

수면(100);

계속하다;

}

}

}

동안 (사실)

{

if (IStopped())

{

인쇄("EA가 종료되었습니다!");

리턴(-1);

}

if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)

{

Print("대기 시간(" + MaxWaitingSec + " 초)을 초과했습니다!");

if (Alerts) Alert (Symbol() + "대기 시간이 초과되었습니다!");

리턴(-2);

}

if (GlobalVariableSetOnCondition("TradeIsBusy", 1.0, 0.0)) return (1);

또 다른

{

오류 = GetLastError();

만약 (에러 != 0)

{

인쇄("TradeIsBusy - GlobalVariableSetOnCondition - 오류 번호 ", 오류);

계속하다;

}

}

if (Alerts) Alert (Symbol() + " - 다른 EA가 거래를 마칠 때까지 기다리는 중...");

수면(1000);

}

}

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

무효 TradeIsNotBusy()

{

정수 오류;

if (IsTesting())

{

리턴(0);

}

동안 (사실)

{

if (IStopped())

{

Print (Symbol() + " EA가 종료되었습니다!" );

리턴(-1);

}

if (GlobalVariableSet("TradeIsBusy", 0.0) > 0) return(1);

또 다른

{

오류 = GetLastError();

만약 (에러 != 0)

인쇄("TradeIsNotBusy - GlobalVariableSet - 오류 번호 ", 오류);

}

수면(100);

}

}

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

나는 IsTradeAllowed 기능 없이 시도할 것입니다.

어쨌든 감사합니다.

즐거운 시간 보내세요,

시몬

 

오류 코드 130

----- 삭제됨 ----- 더 이상 필요하지 않습니다......

 

다운로드 가능한 mq4 튜토리얼

안녕하세요 여러분,

mq4 코드에 대한 튜토리얼이나 참고서(온라인 아님 !!)를 찾을 수 없습니다.

도와주세요 ?

친애하는

해결됨, 유틸리티를 사용하여 파일의 압축을 풀어야 했습니다.