KimIV의 유용한 기능 - 페이지 120

 

안녕하세요.

가장 수익성이 없는 위치를 반환하도록 GetProfitOpenPosInCurrency() 함수를 재설계했습니다. 미안하다고 말해줘 이 위치(OrderOpenTime())의 시작 시간을 반환하는 데 적합한 함수는 무엇입니까?

 double GetMaxLoseOpenPosInCurrency( string sy= "" , int op=- 1 , int mn=- 1 ) {
   double p= 0 ;
   int     i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) 
             if (p > OrderProfit() + OrderSwap() + OrderCommission()){
            p=OrderProfit()+OrderCommission()+OrderSwap();
          }
        }
      }
    }
  }
   return (p);
}
 
abeiks :

안녕하세요.

가장 수익성이 없는 위치를 반환하도록 GetProfitOpenPosInCurrency() 함수를 재설계했습니다. 미안하다고 말해줘 이 위치(OrderOpenTime())의 시작 시간을 반환하는 데 적합한 함수는 무엇입니까?


티켓 번호를 반환하면 표준 기능으로 갈 수 있습니다.
 
Vinin :

티켓 번호를 반환하면 표준 기능으로 갈 수 있습니다.

고맙습니다.
 

KimIV , 안녕하세요. 제가 찾고 있습니다 - 스크립트를 찾을 수 없습니다 --- 모든 보류 중인 주문을 기호로 삭제 --- 기호로 추적 , 아마도 -- 레이아웃 ....... 뻔뻔스럽게 받아들이세요. 미리 감사합니다.

 

안녕하세요.

KimIV의 isTradeTimeInt() 함수를 사용합니다. 많은 시간 간격을 사용하고 각 간격에 다른 변수가 할당됩니다. 이를 위해 저는 그러한 코드를 만들었습니다(지금까지 2개 간격). 문제는 이것이 가장 올바른 해결책입니까 아니면 문제에 접근할 수 있는 다른 방법이 있습니까?

 extern int OH1= 9 ; extern int OM1= 0 ; extern int CH1= 12 ; extern int CM1= 0 ;
extern int OH2= 13 ; extern int OM2= 0 ; extern int CH2= 15 ; extern int CM2= 0 ;

int HourOpenTime()
{
int trade = 0 ;
if (isTradeTimeInt(OH1,OM1,CH1,CM1))trade = 1 ;
if (isTradeTimeInt(OH2,OM2,CH2,CM2))trade = 2 ;
return (trade);
}
 
bestseich :

친애하는 Igor Kim, OrderCloseBy() 유형의 함수를 작성하는 데 도움을 주었지만 다른 쌍과 OrderProfit()에서 작동했으며 하나의 OrderProfit() 과 같이 다방향 주문이 있는지 여부는 중요하지 않습니다. 또 다른, 또 다른 쌍, 얼마나 많은 Point 와 both , 즉 이 두 개만 동시에 닫혀 있는지. 내 옵션은 다음과 같습니다.

for (int i=OrdersTotal()-1;i>=0;i--)

{
if(주문선택(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()!=Symbol()||OrderSymbol()==Symbol())
{
if(OrderProfit()>=pr*Point)//pr은 매개변수, 이익 포인트에 있습니다.
int ot=OrderTicket();더블 op=OrderProfit();
if(OrderProfit()<=pru*(-1)*Point)//pru는 매개변수, 손실 포인트에 있습니다.
int otu=OrderTicket();더블 opu=OrderProfit();
if(op>opu*v*(-1)&&(OrderType()==OP_BUY||OrderType()==OP_SELL))
//v는 1.5와 같은 손익 비율 유형입니다.
OrderClose(otu,OrderLots(),Bid,sleep,Blue);
OrderClose(ot,OrderLots(),Bid,sleep,Blue);
OrderClose(otu,OrderLots(),묻기,잠자기,파란색);
OrderClose(ot,OrderLots(),묻기,수면,파란색);

}}}

작동할까요? 스크랩이 아닌 경우 솔루션을 수정하거나 제안하십시오.

 

친애하는 이고르!

마지막 주문이 마감된 후 다음 주문이 열리기 전에 계정 잔액 에 따라 로트 볼륨을 계산하는 기능이 있는지 알려주세요.

미리 감사드립니다.

 
vasabu2012 :

친애하는 이고르!

마지막 주문이 마감된 후 다음 주문이 열리기 전에 계정 잔액에 따라 로트 볼륨을 계산하는 기능이 있는지 알려주세요.

미리 감사드립니다.

다음은 Igor의 기능입니다.

파일:
b-lots.mqh  3 kb
 

업데이트에서 PriceOpenLastPos 기능은 조건에서 작동을 멈췄고 모스크바는 거의 고장 났으며 주석에 값을 주었지만 조건에서는 작동하지 않으며 약간의 편집으로 문제가 해결되었습니다.

double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0, r2=0;
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()) {
t=OrderOpenTime();
r=OrderOpenPrice();
}
}
}
}
}
}
}

r2 = DoubleToStr(r, 4);

return(r2);
}


 
MetaEditor의 프로그래밍 변경 사항을 고려하여 e-CloseByEquity.rar Expert Advisor 를 다시 컴파일하도록 도와주세요.