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

 

안녕하세요. 찻주전자가 그것을 알아낼 수 있도록 도와주세요: 분 단위로 대기 중인 주문 을 할 수 있는 조언자가 있습니다. 그리고 최대. 이전 촛불. 촛불 방향으로 열립니다.

필요:

- 여는 방향을 변경합니다. 보류 중인 구매 변경 - 보류 중인 판매

- 분 대신. 그리고 최대. 이전 촛불 만들기 분. 그리고 전날의 스윙

- 다른 모든 것은 그대로 두십시오. 주문 삭제, 로트 매개변수, 손절매, 매직 넘버

내 모든 작업으로 인해 테스터에서 오류 130이 발생하거나 전혀 컴파일되지 않습니다. 어떤 조언을 해주셔서 감사합니다.

아래는 내 개입 없이 작동하는 코드입니다.

외부 이중 로트 = 0.01;
extern int 손절매 = 0;
외부 정수 TakeProfit = 0;
외부 정수 매직 = 618;

int Up_bars = 0;
int Down_bars = 0;

이중 StopLoss_new = 0;
이중 TakeProfit_new = 0;

//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----

//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----

//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
//----

for(int cnt=0;cnt<OrdersTotal();cnt++)
{
if (OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES)>0)
{
만약 (
(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
&& OrderMagicNumber() == 마법
&& 주문 기호() == 기호()
&& OrderComment() != DoubleToStr(막대,0)
)
{
댓글("오케이");
주문삭제(주문티켓());
}
}
}

StopLoss_new = 손절매;
TakeProfit_new = TakeProfit;

if (Up_bars != 바)
{
if (High[1]-Ask >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(High[1]-StopLoss*Point,Digits);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(High[1]+TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_BUYSTOP,Lot,NormalizeDouble(High[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
수면(1000);
새로 고침();
}
또 다른
{
up_bars = 바;
}
}
}

StopLoss_new = 손절매;
TakeProfit_new = TakeProfit;

if (Down_bars != 막대)
{
if (Bid-Low[1] >= MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
{
if (StopLoss_new != 0) StopLoss_new = NormalizeDouble(Low[1]+StopLoss*Point,Digits);
if (TakeProfit_new != 0) TakeProfit_new = NormalizeDouble(Low[1]-TakeProfit*Point,Digits);
if (OrderSend(Symbol(),OP_SELLSTOP,Lot,NormalizeDouble(Low[1],Digits),10,StopLoss_new,TakeProfit_new,DoubleToStr(Bars,0),Magic,0,Green) < 0)
{
수면(1000);
새로 고침();
}
또 다른
{
down_bars = 바;
}
}
}


//----
리턴(0);
}
//+----------------------------------------------- --------------------+

 
delf :

안녕하세요. 찻주전자가 알아낼 수 있도록 도와주세요.

"초보자 질문"과 " EA를 완전히 다시 실행 "을 혼동하셨습니까?
 
LazarevDenis :

캡틴 뻔한 ... 그리고 똑같이, 누군가에게 말하십시오

나는 제안합니다 - 그 표현을 단어로 쓰십시오. 그리고 당신은 당신이 틀렸다는 것을 이해할 것입니다.

추신.
오류를 찾아야 할 위치가 너무 분명하다면 왜 질문합니까?

 
delf :


오류 130 . stop and take를 검토합니다.
 
LazarevDenis :

도와주세요, 주문은 높은 가격에서 orderopenprice까지의 거리보다 4배 더 큰 거리에서 마감되어야 합니다.

내가 어디서 망했어?

모든 주문은 개장 후 3핍을 마감합니다.


계산기를 사용하여 공식의 결과를 계산해 보셨습니까? 그렇지 않다면 계산하십시오. 내가 모든 조건을 알지 못한다는 사실 때문일 수도 있습니다.
 

단 하나의 실수 - 수정 방법을 모르겠습니다. 개는 어디에 묻혔습니까?

' 기호 ' - 초기화 예상 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

'기호 - 초기화 예상 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

 extern double lot= 0.1 ;
extern double tp= 0 ;
extern double sl= 0 ;
int Real_Order=- 1 ;     // Пока рыночных нет

string Symb= Symbol ;                         // Финанс. инструмент

int start()     // Спец. функция start()


{                                
   OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 0 ,Bid-sl* Point ,Ask+tp* Point ); 
   if ( IsDemo ()) PlaySound ( "alert.wav" );
   
       for ( int i= 1 ; i<= OrdersTotal (); i++)       //Цикл по всем ордерам,..
     {                                         //отражённым в терминале
       if ( OrderSelect (i- 1 ,SELECT_BY_POS)==true) //Если есть следующий
        {  
               //--------------------------------------------------------------                                   
         if ( OrderSymbol ()!= Symb) continue ;     // Не наш фин.инструм.
         int Tip= OrderType ();                   // Тип ордера
         if (Real_Order> 1 ) continue ;                   //отложник ордер  
         //------------------------------------------------------ 4 --
         double Price= OrderOpenPrice ();         // Цена ордера
         if 
             NormalizeDouble (tp,sl, Digits )       // Выбор самого близкого орд       
           {         
            Real_Order=Tip;                     // Есть рыночный ордер
             int Ticket= OrderTicket ();           // Номер ордера
             double Lot= OrderLots ();             // Количество лотов
           }
        }                                       //Конец анализа ордера
     }                                           //Конец перебора орд.
     //---------------------------------------------------------------------+
     while (true)                                   // Цикл закрытия орд.
     {
       if (Real_Order==- 1 )                       // Если рыночных нет
        {
         Alert ( "По " ,Symb, " рыночных ордеров нет" );
         break ;                                 // Выход из цикла закр        
        }
       //--------------------------------------------------------- 7 --
       switch (Real_Order)                         // По типу ордера
        {
         case 0 : double Price_Cls=Bid;           // Ордер Buy
             string Text= "Buy " ;                 // Текст для Buy
             break ;                               // Из switch
         case 1 : Price_Cls=Ask;                 // Ордер Sell
            Text= "Sell " ;                       // Текст для Sell
        }
       Alert ( "Попытка закрыть " ,Text, " " ,Ticket, ". Ожидание ответа.." );
       bool Ans= OrderClose (Ticket,Lot,Price_Cls, 2 ); // Закрытие ордера
       //--------------------------------------------------------- 8 --
       if (Ans==true)                             // Получилось :)
        {
         Alert ( "Закрыт ордер " ,Text, " " ,Ticket);
         break ;                                 // Выход из цикла закр
        }    
       //--------------------------------------------------------- 9 --
       int Error= GetLastError ();                 // Не получилось :(
       switch (Error)                             // Преодолимые ошибки
        {
         case 135 : Alert ( "Цена изменилась. Пробуем ещё раз.." );
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
         case 136 : Alert ( "Нет цен. Ждём новый тик.." );
             while ( RefreshRates ()==false)         // До нового тика
               Sleep ( 1 );                         // Задержка в цикле
             continue ;                           // На след. итерацию
         case 146 : Alert ( "Подсистема торговли занята. Пробуем ещё.." );
             Sleep ( 500 );                         // Простое решение
             RefreshRates ();                     // Обновим данные
             continue ;                           // На след. итерацию
        }
       switch (Error)                             // Критические ошибки
        {
         case 2 : Alert ( "Общая ошибка." );
             break ;                               // Выход из switch
         case 5 : Alert ( "Старая версия клиентского терминала." );
             break ;                               // Выход из switch
         case 64 : Alert ( "Счет заблокирован." );
             break ;                               // Выход из switch
         case 133 : Alert ( "Торговля запрещена" );
             break ;                               // Выход из switch
         default : Alert ( "Возникла ошибка " ,Error); //Другие варианты   
        }
       break ;                                     // Выход из цикла закр
     }  
 
   
   return ;                                   // Выход из start()
  }
 

alex12 , 다음과 같이 특정한 것을 지정하십시오.

 string Symb= "EURUSD" ;                         // Финанс. инструмент
 
alex12 :

단 하나의 실수 - 수정 방법을 모르겠습니다. 개는 어디에 묻혔습니까?

'기호' - 초기화 예상 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

'기호 - 초기화 예상 C:\Program Files\MetaTrader Finam\experts\1.mq4 (8, 13)

너:

 string Symb= Symbol ;                         // Финанс. инструмен

그리고 다음이 필요합니다.

 string Symb= Symbol() ;                         // Финанс. инструмент
일반적으로 오류 메시지 를 두 번 클릭하면 커서가 컴파일 오류가 발생한 표시된 위치(예: (8, 13))로 이동합니다.

그 뒤로는 다른 에러들이 떨어지겠죠... :)

위 줄을 start() 함수의 시작 부분으로 이동합니다.

이것은 초보자를 위한 것입니다 - 그런 다음 나머지 오류를 처리하십시오 ...

 

안녕하세요.

도움이 필요합니다. 상황을 설명합니다.

현재 가격은 1.4100입니다(예:). 시가가 1.4090에서 1.4110 사이(1.4100에서 마이너스 10pt) 내에 있을 이전 막대를 찾아야 합니다. 이것이 적합합니다.

그러나 열린 왼쪽과 오른쪽이 더 작습니다. 예를 들어, 프로그램은 1.4105의 시작을 가진 막대를 찾았습니다. 우리에게 적합합니다.

다음으로, 프로그램은 이 막대를 왼쪽 막대 및 오른쪽 막대와 비교하여 더 작으면 이 막대가 적합하다고 말합니다.

 

Artem , 농담은 아래와 같은 줄이 있다는 것입니다.

 if ( OrderSymbol ()!= Symb) continue ;     // Не наш фин.инструм.

따라서 귀하가 제안한 방식은 너무 논리적이지 않습니다. alex12 가 원하는 것을 올바르게 이해했다면.