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

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

도와주세요, 프랙탈 분석에 대한 조언자가 있습니다. 좋은 매개변수를 골랐고 마틴게일 로트를 넣도록 추가해야 합니다(잃으면 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 :
다른 분기에 메시지를 복제하지 마십시오. 이는 잘못된 형식입니다.

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