[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 291

 
모두 감사합니다! 알아냈습니다. 처음에는 IndicatorBuffers(2) 없이 했습니다. 그리고 작동하지 않았다..
 

도와주세요, 프랙탈 분석에 대한 조언자가 있습니다. 좋은 매개변수를 골랐고 마틴게일 로트를 넣도록 추가해야 합니다(잃으면 2개 더). .여기에 조언자가 있습니다.

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

//| 도형.mq4 |

//| 까지 |

//| http://www.forex-tradexperts-to.narod.ru |

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

#재산권 "TO"

#속성 링크 "http://www.forex-tradexperts-to.narod.ru"





#include <WinUser32.mqh>


외부 int TP_Fract_3=300;

외부 int SL_Fract_3=200;

외부 정수 TP_Fract_11=500;

외부 int SL_Fract_11=300;

extern bool buy_Fract_3=참;

extern 부울 판매_Fract_3=참;

extern bool buy_Fract_11=참;

extern 부울 판매_Fract_11=참;

extern 부울 subtvergdenie=거짓;

extern int tofrat=10;

외부 이중 로트=0.1;

외부 정수 ID = 5452;


스트링컴;

이중 확산;


정수 초기화()

{

com=DoubleToStr(ID,0);

Spread=MarketInfo(Symbol(),MODE_SPREAD)*포인트;

리턴(0);

}


정수 초기화()

{

리턴(0);

}


날짜 시간 t1,t2=0;


bool order(두 배 가격, int 유형, string c, int m)

{

정수 나;

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

{

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

if(OrderComment()==c && OrderMagicNumber()==m && OrderOpenPrice()==가격 && OrderType()==유형)반품(거짓);

if(i==0)반환(참);

}

if(OrdersTotal()==0)return(true);

}


정수 시작()

{

int i,ret;

t1=시간[0];

if(t1!=t2)

{

int fract_buy_3=iHighest(Symbol(), Period(),MODE_HIGH,5,1);

int fract_sell_3=iLowest(Symbol(), Period(),MODE_LOW,5,1);

int fract_buy_11=iHighest(Symbol(), Period(),MODE_HIGH,21,1);

int fract_sell_11=iLowest(Symbol(), Period(),MODE_LOW,21,1);

if( fract_buy_3==3 && buy_Fract_3==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_3]+tofract*Point+spread,4,com,5))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+ 스프레드 ,10,높음[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,com,5);

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

{

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

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==4)

{

OrderModify(OrderTicket(),높음[fract_buy_3]+tofract*Point+spread, 높음[fract_buy_3]+tofract*Point-SL_Fract_3*Point, High[fract_buy_3]+tofract*Point+spread+TP_Fract_3*Point,0,Blue);

부서지다;

}

if(i==0)if(order(높은[fract_buy_3]+tofract*Point+spread,4,com,5))

{

if(확인)

{

ret=MessageBox("신호 "+Symbol()+" H1 BUYSTOP "+"\n주문을 설정하시겠습니까?", "신호", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]+tofract* 포인트+스프레드+TP_Fract_3*포인트,com,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_3]+tofract*Point+spread,10,High[fract_buy_3]+tofract*Point-SL_Fract_3*Point,High[fract_buy_3]Spreadtofract*Point+ +TP_Fract_3*포인트,com,5);

}

}

}

if( fract_sell_3==3 && 판매_Fract_3==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_3]-tofract*Point,5,com,5))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10, 낮음[fract_sell_3]+확산-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,com,5);

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

{

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

if(OrderComment()==com && OrderMagicNumber()==5 && OrderType()==5)

{

OrderModify(OrderTicket(),낮음[fract_sell_3]-tofract*Point,낮음[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract*Point-TP_Fract_3*Point,0,Red);

부서지다;

}

if(i==0)if(order(낮음[fract_sell_3]-tofract*Point,5,com,5))

{

if(확인)

{

ret=MessageBox("신호 "+Symbol()+" H1 SELLSTOP "+"\n주문을 설정하시겠습니까?", "신호", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract* Point-TP_Fract_3*Point,com,5);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_3]-tofract*Point,10,Low[fract_sell_3]+spread-tofract*Point+SL_Fract_3*Point,Low[fract_sell_3]-tofract TP_Fract_3*Point,com,5);

}

}

}

if( fract_buy_11==11 && buy_Fract_11==true)

{

if(OrdersTotal()==0)if(order(High[fract_buy_11]+tofract*Point+spread,4,com,21))OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+ 스프레드 ,10,높음[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,com,21);

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

{

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

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==4)

{

OrderModify(OrderTicket(),High[fract_buy_11]+tofract*Point+spread, High[fract_buy_11]+tofract*Point-SL_Fract_11*Point, High[fract_buy_11]+tofract*Point+spread+TP_Fract_11*Point,0,Blue)

부서지다;

}

if(i==0)if(order(고가[fract_buy_11]+tofract*Point+spread,4,com,21))

{

if(확인)

{

ret=MessageBox("신호 "+Symbol()+" H4 BUYSTOP "+"\n주문을 설정하시겠습니까?", "신호", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+tofract 포인트+스프레드+TP_Fract_11*포인트,com,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_BUYSTOP,lots,High[fract_buy_11]+tofract*Point+spread,10,High[fract_buy_11]+tofract*Point-SL_Fract_11*Point,High[fract_buy_11]+spreadtof +TP_Fract_11*포인트,com,21);

}

}

}

if( fract_sell_11==11 && Sell_Fract_11==true)

{

if(OrdersTotal()==0)if(order(Low[fract_sell_11]-tofract*Point,5,com,21))OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10, 낮음[fract_sell_11]+확산-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,com,21);

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

{

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

if(OrderComment()==com && OrderMagicNumber()==21 && OrderType()==5)

{

OrderModify(OrderTicket(),낮음[fract_sell_11]-tofract*Point,낮음[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_sell_11]-tofract*Point-TP_Fract_11*Point,0,Red)

부서지다;

}

if(i==0)if(order(낮음[fract_sell_11]-tofract*Point,5,com,21))

{

if(확인)

{

ret=MessageBox("신호 "+Symbol()+" H4 BUYSTOP "+"\n주문을 설정하시겠습니까?", "신호", MB_YESNO|MB_ICONQUESTION);

if(ret==IDYES)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_tofract*11]- Point-TP_Fract_11*Point,com,21);

}

if(!podtvergdenie)OrderSend(Symbol(),OP_SELLSTOP,lots,Low[fract_sell_11]-tofract*Point,10,Low[fract_sell_11]+spread-tofract*Point+SL_Fract_11*Point,Low[fract_tell_11]Point TP_Fract_11*포인트,컴,21);

}

}

}

t2=시간[0];

}

반환(0);

}

나는 러시아어로 글을 잘 쓰지 못합니다. 죄송합니다!

 
AppaRat :

나는 러시아어로 글을 잘 쓰지 못합니다. 죄송합니다!

당신은 또한 코딩하는 방법을 모릅니다. 이 시트를 읽고 싶은 마음이 없습니다.
 

누가 Klimov 블록을 도울 수 있는지 알려주세요. 문제는 마지막으로 닫힌 값이 아니라 조건에 의해 마지막으로 닫힌 값을 반환한다는 것입니다.

2가지 조건에서 토비시

 bool BuystopLotA=isCloseLastPosByStop( NULL ,OP_BUY,MagBuy,LotA);
и
bool BuyTakeLotB=isCloseLastPosByTake( NULL ,OP_BUY,MagBuy,LotB);

동시에 두 값에 대해 True를 반환합니다.

조건에 따라 마지막 주문이 아닌 마지막으로 마감된 주문 사용하도록 하는 방법,

여기에 코드 자체가 있습니다. 편의를 위해 수표를 많이 추가했습니다.

 //+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop( string sy= "" , int op=- 1 , int mn=- 1 , int ll=- 1 ) {
   datetime t;
   double    ocp, osl;
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
             if (ll< 0 || OrderLots()==ll) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    osl= NormalizeDouble (OrderStopLoss(), dg);
     if (ocp==osl) return (True);
  }
   return (False);
}



//+----------------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake( string sy= "" , int op=- 1 , int mn=- 1 , int ll=- 1 ) {
   datetime t;
   double    ocp, otp;
   int       dg, i, j=- 1 , k=OrdersHistoryTotal();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if (OrderSymbol()==sy || sy== "" ) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (op< 0 || OrderType()==op) {
             if (mn< 0 || OrderMagicNumber()==mn) {
             if (ll< 0 || OrderLots()==ll) {
               if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
} 
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
     if (dg== 0 ) if ( StringFind (OrderSymbol(), "JPY" )< 0 ) dg= 4 ; else dg= 2 ;
    ocp= NormalizeDouble (OrderClosePrice(), dg);
    otp= NormalizeDouble (OrderTakeProfit(), dg);
     if (ocp==otp) return (True);
  }
   return (False);
}
 
FoxUA :

누가 Klimov 블록을 도울 수 있는지 알려주세요. 문제는 마지막으로 닫힌 값이 아니라 조건에 의해 마지막으로 닫힌 값을 반환한다는 것입니다.

2 조건에서 tobish

동시에 두 값에 대해 True를 반환합니다.

조건에 따라 마지막 주문이 아닌 마지막으로 마감된 주문 사용하도록 하는 방법,

여기에 코드 자체가 있습니다. 편의를 위해 체크를 많이 추가했습니다.


함수에 직접 수표를 추가했습니까? 이제 그들은 전송된 로트로 마지막 마감 위치 를 확인하고 로트는 아마도 항상 0 또는 정수와 같을 것입니다. 변수 ll은 double 유형이어야 합니다. 그리고 왜 많은 수표가 있습니까?

당신이 달성하고 싶은 것을 작성하면 그들이 당신에게 말할 것입니다 :)

 

예, 그리고 로트가 int인 이유는 무엇입니까? 롯은 항상 두 배였습니다.

그렇게 할 수 있습니다. 하나의 주문이 남아 있을 때 남은 주문을 확인하고 반대 주문을 검색하십시오.

 
FoxUA :

누가 Klimov 블록을 도울 수 있는지 알려주십시오 ...

다른 분기에 메시지를 복제하지 마십시오. 이는 잘못된 형식입니다.
 
artmedia70 :

함수에 직접 수표를 추가했습니까? 이제 그들은 전송된 로트로 마지막 마감 위치를 확인하고 로트는 아마도 항상 0 또는 정수와 같을 것입니다. 변수 ll은 double 유형이어야 합니다. 그리고 왜 많은 수표가 있습니까?

당신이 달성하고 싶은 것을 작성하면 그들이 당신에게 말할 것입니다 :)

네, 제가 이루고자 하는 바를 구체적으로 적거나, 오히려 이미 다 이루었지만 버그가 1개 있습니다.

double을 int로 바꾸면 원래는 double인데 왜 변경하고 보니 그냥 돌려주는 걸 깜빡하고 추첨을 통해 확인하지 않아도 함수를 따로따로 사용해도 결과가 안바뀌어서 아마 제가 안한거겠죠? 여기에 캔버스 확인을 올바르게 포함하지 마십시오. 한 마디로 버그보다 알아낼 수 있도록 도와주세요.

이것이 요청의 모습입니다

вот так работает без проблем 
bool BuystopLotA=isCloseLastPosByStop( NULL ,OP_BUY,MagBuy,LotA);
bool BuyTakeLotA=isCloseLastPosByTake( NULL ,OP_BUY,MagBuy,LotA);
bool SellstopLotC=isCloseLastPosByStop( NULL ,OP_SELL,MagBuy,LotC);
bool SellTakeLotC=isCloseLastPosByTake( NULL ,OP_SELL,MagBuy,LotC);

при добовлении вот этих запросов
bool BuystopLotB=isCloseLastPosByStop( NULL ,OP_BUY,MagBuy,LotB);
bool BuyTakeLotB=isCloseLastPosByTake( NULL ,OP_BUY,MagBuy,LotB);

начинает возвращять True не по одному а по двум запросам 
BuyTakeLotB и BuystopLotA



 
Roger :

예, 그리고 로트가 int인 이유는 무엇입니까? 롯은 항상 두 배였습니다.

그렇게 할 수 있습니다. 하나의 주문이 남아 있을 때 남은 주문을 확인하고 반대 주문을 검색하십시오.


tobish를 여는 조건이 변경되기 때문에 모든 것이 그렇게 간단하지는 않습니다. 판매로 2가 될 수 있으며이 검색은 아무 것도 찾지 못합니다.
 
granit77 :
다른 분기에 메시지를 복제하지 마십시오. 이는 잘못된 형식입니다.

죄송합니다, 다른 주제의 동일한 게시물을 삭제하는 것을 잊지 않도록 노력하겠습니다.