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

 

뭐가 문제인지 이해가 안가요?

int start() 

{

bool i;

int ticket;

double Pricem;

datetime Timen; 

string Symb=Symbol();

ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);

i=OrderSelect(0,SELECT_BY_POS);

while(true)

{

RefreshRates();

Timen=OrderCloseTime();

  if(Timen>0)

   {

     Pricem=OrderClosePrice();

     Alert(Pricem);

     Alert("ордер закрылся");

     Sleep(30000);

 }

 Sleep(10);

 }

return;                              

}


닫기 메시지가 나타나야 합니다. 주문이 열리고, 정류장에 도착하고, 닫힙니다. 실수는 어디에 있습니까?
 

MQL4를 사용하여 열려 있는 모든 차트를 닫는 문제를 해결합니다. 다른 통화 쌍과 다음 스크립트 코드가 있는 3개의 공개 차트가 있습니다.

   for ( int i= 1 ;i<= 3 ;i++) {
       long current= ChartID ();
       Print ( "итерация цикла: " ,i, ", идентификатор текущего графика " ,current);
       bool result= ChartClose (current);
       if (result) Print ( "окно успешно закрыто" );
       else Print ( "не удалось закрыть окно с идентификатором: " , current);
   }

스크립트가 실행되면 세 개의 차트 중 하나만 닫히고 다음은 로그의 인쇄 내용입니다.

AUDUSD,H1: итерация цикла: 1 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 2 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 3 , идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто

즉, 하나의 차트가 닫히면 현재 차트가 다른 차트가 되는 것처럼 보이지만 다음과 같습니다.

1. 첫 번째 차트를 닫은 후 ChartID 함수 는 현재 차트가 아닌 닫힌 차트 의 ID를 반환합니다.

2. ChartClose() 함수는 두 번째 및 세 번째 반복에서 true를 반환합니다. 즉, 이미 닫힌 창을 일종의 성공적으로 닫습니다...

누군가 버그가 어디에 있고 이 문제를 해결하는 방법을 말해 줄 수 있습니까?

 
CJIeCaPb :

뭐가 문제인지 이해가 안가요?

닫는 메시지가 나타나야 합니다. 주문이 열리고, 정류장에 도착하고, 닫힙니다. 실수는 어디에 있습니까?

나는 OrderSelect() 가 while 루프 안에 있어야 하고, 게다가 위치 번호가 올바르지 않을 것이라고 믿습니다. 왜냐하면 닫은 후에는 달라질 것입니다 - 이 경우 티켓으로 선택하는 것이 좋습니다
 
tuner :
나는 OrderSelect()가 while 루프 안에 있어야 하고, 게다가 위치 번호가 올바르지 않을 것이라고 믿습니다. 왜냐하면 닫은 후에는 달라질 것입니다 - 이 경우 티켓으로 선택하는 것이 좋습니다
와우, 효과가 있었다! 고마워
 
tuner :

MQL4를 사용하여 열려 있는 모든 차트를 닫는 문제를 해결합니다. 다른 통화 쌍과 다음 스크립트 코드가 있는 3개의 공개 차트가 있습니다.

스크립트가 실행되면 세 개의 차트 중 하나만 닫히고 다음은 로그의 인쇄 내용입니다.

즉, 하나의 차트가 닫히면 현재 차트가 다른 차트가 되는 것처럼 보이지만 다음과 같습니다.

1. 첫 번째 차트를 닫은 후 ChartID 함수 는 현재 차트가 아닌 닫힌 차트의 ID를 반환합니다.

2. ChartClose() 함수는 두 번째 및 세 번째 반복에서 true를 반환합니다. 즉, 이미 닫힌 창을 일종의 성공적으로 닫습니다...

누군가 버그가 어디에 있고 이 문제를 해결하는 방법을 말해 줄 수 있습니까?

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (currChart< 0 ) break ;  
      prevChart=currChart;
       ChartClose (currChart);
      i++;
     }
     ChartClose ( ChartFirst ());
  }
//+------------------------------------------------------------------+
 

pako , 때로는 작동하고 때로는 작동하지 않습니다. 왜 그런지 이해가 되지 않습니다. 오류가 발생합니다.

2014.12.11 17:52:12.456 'C:\.......ex4'에서 0x09295000에 대한 액세스 위반 읽기

아마도 스크립트가 던져진 차트를 닫으 려는 사실 때문일까요?

스크립트를 왼쪽의 첫 번째 차트에 놓으면 PS가 올바르게 작동합니다. 그리고 다른 경우 오류가 발생합니다.

 
tuner :

pako , 때로는 작동하고 때로는 작동하지 않습니다. 왜 그런지 이해가 되지 않습니다. 오류가 발생합니다.

2014.12.11 17:52:12.456 'C:\.......ex4'에서 0x09295000에 대한 액세스 위반 읽기

아마도 스크립트가 던져진 차트를 닫으려는 사실 때문일까요?

스크립트를 왼쪽의 첫 번째 차트에 놓으면 PS가 올바르게 작동합니다. 그리고 다른 경우 오류가 발생합니다.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   long currChart,prevChart= ChartFirst ();
   int i= 0 ,limit= 100 ;
   while (i<limit)
     {
      currChart= ChartNext (prevChart);
       if (currChart< 0 ) break ; 
       ChartClose (currChart); 
      prevChart=currChart;
      i++;
     }
     ChartClose ( ChartFirst ());
  }
//+------------------------------------------------------------------+
 

얘들아 내가 알아낼 수 있도록 도와줘

문제는 주문을 무손실로 전환하는 기능이 ene pair로 설정하고 모든 미결 주문을 무손실로 전환하도록 허용하면 제대로 작동하지 않는다는 것입니다.

새로운 것은 모든 것을 번역하지만 5개의 문자에서는 0으로만 번역됩니다. 비록 +1 포인트여야 하지만 가장 흥미로운 점은 즉시 5개의 문자로 설정하면 잘 작동한다는 것입니다.

그리고 새로운 다섯 자리로 모든 주문을 정상적으로 번역합니다. 그러한 작업의 이유는 무엇이며, 실행이 정확하고 전문가의 작업이 내가 던진 창에 의존하지 않도록 이러한 기능에서 고려해야 할 사항 세 자리 또는 다섯 자리

정말 감사합니다 .

    }

 //==================================================================================================

 // функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам

 //==================================================================================================

 if(_Simbol==false)//если false то по всем ордерам открытым 

 { 

   for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров

     {

       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие

         {

           if(OrderType()==OP_BUY) //если тип бай

            {

             double  bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента

             double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

             

               if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия

                {

                  if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия

                   {//модифицируем стоп лос

 bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

              if(!ord_modifik)//если не получилось

              Comment(GetLastError());//номер ошибки в угол

                   }

                   

                }

            }

            if(OrderType()==OP_SELL)//если тип селл

            {

              double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента

              double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

              

              if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю

              {

                if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия

                  {//модифицируем стоп лос

  bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

                  if(!ord_modifik)//если не получилось

                  Comment(GetLastError());//номер ошибки в  угол

                  }

                }

             } 

          }

       }

    }

  

 
pako :

코드에 감사드립니다. 일반적으로 본질은 명확하지만 때로는 여전히 오류가 발생합니다.

차트 ID를 표시하는 기능을 실험했습니다. 문서에서 ChartFirst() 가 무엇인지 완전히 이해할 수 없습니다. 어떤 식으로든 해석할 수 있습니다. 이는 왼쪽에서 순서대로 첫 번째 차트를 의미하거나 모든 열린 것의 첫 번째 열기(시간별)를 의미하거나 심지어 가장 처음으로 열림을 의미합니다. 터미널에서 열었습니다(지금 열려 있을 확률은 거의 0이므로 닫는 의미가 없습니다). 저는 최신 버전을 선호합니다. tk. 이 함수가 현재 열려 있는 차트의 ID를 반환하는 것을 본 적이 없습니다.

 
tuner :

코드에 감사드립니다. 일반적으로 본질은 명확하지만 때로는 여전히 오류가 발생합니다.

차트 ID를 표시하는 기능을 실험했습니다. 문서에서 ChartFirst()가 무엇인지 완전히 이해할 수 없습니다. 어떤 식으로든 해석할 수 있습니다. 이는 왼쪽에서 순서대로 첫 번째 차트를 의미하거나 모든 열린 것의 첫 번째 열기(시간별)를 의미하거나 심지어 가장 처음으로 열림을 의미합니다. 터미널에서 열었습니다(지금 열려 있을 확률은 거의 0이므로 닫는 의미가 없습니다). 저는 최신 버전을 선호합니다. tk. 이 함수가 현재 열려 있는 차트의 ID를 반환하는 것을 본 적이 없습니다.

차트 우선

클라이언트 터미널의 첫 번째 차트의 식별자를 반환합니다.

나는 이것이 가장 왼쪽 차트라는 것을 이해합니다.

사유: