포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 78

 
순서대로 응답해 주십시오. 히스토그램으로 표시되는 표시기가 있습니다. 가입시나 재접속시에는 낮아진 값을 보여줍니다. 첫 번째 시작의 조건을 배열의 0번째 셀을 0으로 설정합니다. 그리고 인터넷에 넣어 - 도움이되지 않았습니다. 나는 처음에 그것을 재설정합니다 - 표준. (가입에 관한 것입니다). 네트워크 중단에 대해. 시작 시 조건 설정: if( GetLastError()==6 )zas[0]=0.0; - 도움이 되지 않습니다. 나는 그 질문의 진부한 냄새를 맡았지만 나 자신은 길을 잃었습니다. 분명히 지식의 격차입니다.
 
dikson1976-1 :
순서대로 응답해 주십시오. 히스토그램으로 표시되는 표시기가 있습니다. 가입시나 재접속시에는 낮아진 값을 보여줍니다. 첫 번째 시작의 조건을 배열의 0번째 셀을 0으로 설정합니다. 그리고 인터넷에 넣어 - 도움이되지 않았습니다. 나는 처음에 그것을 재설정합니다 - 표준. (가입에 관한 것입니다). 네트워크 중단에 대해. 시작 시 조건 설정: if(GetLastError()==6)zas[0]=0.0; - 도움이 되지 않습니다. 나는 그 질문의 진부한 냄새를 맡았지만 나 자신은 길을 잃었습니다. 분명히 지식의 격차입니다.

코드가 없습니다.
 

도졸 :



역순으로 순서를 살펴보십시오.

 for (i= OrdersTotal ()- 1 ;i>= 0 ;i--)
      {
       OrderSelect (i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
스스로 관리했습니다. 스트레스 받지 마세요. 모두에게 감사합니다.
 
Dozol :

친구, 도와주세요. 선택한 통화 쌍에 대한 모든 주문을 마감해야 합니다. 다음은 내가 작성한 것입니다(EA 코드의 일부).

int 자크리트_vse() ...

SRC를 사용하여 포럼에 코드 삽입

코드를 작성하는 동안 이미 이해했지만, 코드를 추가했습니다. 여기에 게시하겠습니다. 아마도 흥미로운 것을 찾을 수 있을 것입니다.

 int Zakrit_vse()
{  
if ( OrdersTotal ()> 0 )
{   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {   if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      {   if (OrderSymbol()!= Symbol ()) continue ;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(), CLR_NONE )
            Prov_oshibok();
             return ( 0 );
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid, 100 , CLR_NONE );
            Prov_oshibok();
             return ( 0 );
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask, 100 , CLR_NONE );
            Prov_oshibok();
             return ( 0 );
         }
}  }  }
}
 
Dozol :

친구, 도와주세요. 선택한 통화 쌍에 대한 모든 주문을 마감해야 합니다. 다음은 내가 작성한 것입니다(EA 코드의 일부).


모든 것이 이미 당신을 위해 발명되었는데 왜 바퀴를 재발명하세요. 예를 들어 . 이것을 잊지 마세요 .
 

돕다! 외부 채널 표시기에 대한 어드바이저 코드가 있습니다(채널의 상한에 도달하면 거래가 판매를 위해 열리고 하한에 도달하면 역순으로 구매하기 위해 닫힙니다). 알 수 없는 이유로 거래가 열리지 않고 오류를 찾을 수 없습니다. 다른 채널 표시기와 완벽하게 작동합니다. 모든 픽업된 버퍼를 즉시 규정합니다.

코드를 첨부합니다

extern 이중 랏 = 0.1;
extern string Сomment = "TMA Canal2";
외부 정수 TakeProfit = 20;
extern int 손절매 = 20;
extern int 미끄러짐 = 2; // 미끄러짐
외부 정수 매직 = 124;

extern string Indi = "표시 데이터";
extern string TimeFrame = " 현재 시간 프레임";
extern int TMAPeriod = 56;
extern int 가격 = PRICE_CLOSE;
외부 이중 ATRMultiplier = 2.0;
extern int ATRPPeriod = 100;
extern 이중 추세 임계값 = 0.5;
외부 부울 ShowCenterLine = false;

이중 PriceHigh, PriceLow, SL, TP;
인트 티켓;

//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
if (Digits ==3 || Digits ==3) // 5자리 브로커의 경우
{
이익을 취하십시오 *= 10;
손절매 *= 10;
미끄러짐 *= 10;
}
리턴(0);
}

//+----------------------------------------------- --------------------+
//| 오픈 포지션 계산 |
//+----------------------------------------------- --------------------+
int CalculateCurrentOrders(문자열 기호)
{
구매 = 0, 판매 = 0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
if(OrderType()==OP_BUY) 구매++;
if(OrderType()==OP_SELL) 판매++;
}
}
//---- 반품 주문량
if(매수>0) 반환(매수);
그렇지 않으면 반환(-판매);
}

//+----------------------------------------------- --------------------+
//| 미결 주문 조건 확인 |
//+----------------------------------------------- --------------------+
무효 CheckForOpen()
{
이중 PriceHigh, PriceLow;
인트 티켓;
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;

PriceHigh = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);


if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"TMA Canal2",124,0,Red);
반품;
}
//---- 구매 조건
if(오픈[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"TMA Canal2",124,0,Blue);
반품;
}
//----
}
//+----------------------------------------------- --------------------+
//| 마감 주문 조건 확인 |
//+----------------------------------------------- --------------------+
무효 CheckForClose()
{
이중 PriceHigh, PriceLow;
//---- 새 막대의 첫 번째 틱에 대해서만 거래를 시작합니다.
if(볼륨[0]>1) 반환;

PriceHigh = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0);
PriceLow = iCustom(Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0);

for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 중단;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) 계속;
//---- 주문 유형 확인
if(주문유형()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
부서지다;
}
if(주문 유형()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
부서지다;
}
}
//----
}

//+----------------------------------------------- --------------------+
//| 시작 기능 |
//+----------------------------------------------- --------------------+
무효 시작()
{
//---- 내역 및 거래 확인
if(Bars<100 || IsTradeAllowed()==false) 반환;
//---- 현재 기호로 미결 주문 계산
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
그렇지 않으면 CheckForClose();
//----
}
//+----------------------------------------------- --------------------+

 
ZahvatkiN :

친애하는 모든 프로그래머에게 인사드립니다. 저는 mql4를 처음 사용하고 SL 및 TP로 작업하는 방법을 알고 있지만 표시기의 반대 신호에서 주문을 마감해야 할 때 문제가 발생하여 어떻게 OrderSelect() 주문 계산 기능이 작동합니다. 여기에 스토캐스틱에 따라 작동하는 간단한 Expert Advisor 코드의 일부가 있습니다. 막대 1과 2 사이에서 과매도 및 교차, 매수를 연 다음 과매수 및 교차, 매수를 마감하고 즉시 매도를 여는 등 나는 사이클이 주문을 정렬하는 데 사용된다는 것을 알고 있습니다. 코드에 있지만 거래 프로세스 중에 밝혀지기 때문에 주문이 열리고 즉시 닫힙니다. 구매를 여는 조건이 판매를 종료하는 조건과 일치하며, 그에게 이렇게 해서는 안 된다고 설명하는 방법을 이해할 수 없습니다. 설명 부탁드립니다.

SRC 버튼을 사용 하여 코드를 삽입하십시오 !

작성한 대로 문서 를 사용하여 추가하십시오!

복사한 경우 개선 사항이나 작업 에 대해 작성자에게 문의하십시오!

 


다시 추가하겠습니다. 글쎄, 몇 번이나 말했는지, 코드를 삽입하려면 맨 윗줄에 있는 버튼을 사용하십시오.

그리고 코드 작성 스타일 을 고수하는 것이 바람직합니다.... 바람직하지만 필수는 아닙니다. 그러나 가장 쉽게 이해할 수 있는 코드가 답이 될 가능성이 높습니다.

 

친애하는 모든 프로그래머에게 인사드립니다. 저는 mql4를 처음 사용하고 SL 및 TP로 작업하는 방법을 알고 있지만 표시기의 반대 신호에서 주문을 마감해야 할 때 문제가 발생하여 어떻게 OrderSelect() 주문 계산 기능이 작동합니다. 여기에 스토캐스틱에 따라 작동하는 간단한 Expert Advisor 코드의 일부가 있습니다. 막대 1과 2 사이에서 과매도 및 교차, 매수를 연 다음 과매수 및 교차, 매수를 마감하고 즉시 매도를 여는 등 나는 사이클이 주문을 정렬하는 데 사용된다는 것을 알고 있습니다. 코드에 있지만 거래 프로세스 중에 밝혀지기 때문에 주문이 열리고 즉시 닫힙니다. 구매를 여는 조건이 판매를 종료하는 조건과 일치하며, 그에게 이렇게 해서는 안 된다고 설명하는 방법을 이해할 수 없습니다. 설명 부탁드립니다.

borilunad 힌트를 주셔서 감사합니다. 다시 수정했습니다. 그런 다음 쓰레기가 없도록 따옴표가 있는 메시지를 삭제할 수도 있습니다.

 if (buy1sOpen())
         {
         OrderSend ( Symbol (), OP_BUY, lots, Ask, Slippage, 0 , 0 , "" , magic, 0 , Blue);
         }
       if (sell1sOpen()) 
         {
         OrderSend ( Symbol (), OP_SELL, lots, Bid, Slippage, 0 , 0 , "" , magic, 0 , Red);
         }
         
       for ( int i= 0 ; i< OrdersTotal (); i++)
         {
         OrderSelect (i,SELECT_BY_POS);
         if (buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if (sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1>Ss1 && Sm2<Ss2 && Sm1< 30 )
       return ( true );
       return ( false );
   }
bool sell1sOpen()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1<Ss1 && Sm2>Ss2 && Sm1> 70 )
       return ( true );
       return ( false );
   }
bool buy1sClose()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1<Ss1 && Sm2>Ss2 && Sm1> 70 )
       return ( true );
       return ( false );
   }
bool sell1sClose()
   {
   Sm1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 1 );
   Ss1= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 1 );
   Sm2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_MAIN, 2 );
   Ss2= iStochastic ( NULL , 0 , 13 , 5 , 5 , MODE_SMA , 0 ,MODE_SIGNAL, 2 );
   if (Sm1>Ss1 && Sm2<Ss2 && Sm1< 30 )
       return ( true );
       return ( false );
   }
사유: