MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1800

 

수신호 에 대한 표준 MT Expert Advisor의 DecreaseFactor는 무엇입니까?

lot= NormalizeDouble (lot-lot*losses/DecreaseFactor, 1 );
 
Nerd Trader # :

이상하게도 이제 버튼이 있습니다. 그리고 초안이기 때문에 코드 더미. 일반적으로 나는 이미 작업 버전을 만들었고 마지막으로 남은 것은 버튼을 제거한 다음 다시 시작되었습니다. 삭제 기능에서 4개의 개체 중 어느 것도 찾을 수 없습니다.

버튼을 클릭하면 모든 라인이 생성됩니다:

버튼이 비활성화된 경우 - 삭제:

어떤 게임이 작성되었는지, 실례합니다.

 
Artyom Trishkin # :

이벤트를 볼 필요가 없습니다. 그들은 테스터에서 전혀 작동하지 않습니다. 상태를 살펴봐야 합니다.

UPD. 물론 겸손하지는 않지만, 한 번이라도 내 조언을 들었다면 모든 것을 오래전에 했을 것입니다. 정확하고 다층 목발없이.

그러나 모든 사람은 자신이 몸을 담그고 싶은 심연을 선택합니다.

마이클 마트코프스키 :

테스터에서 디버깅을 사용하려면 MQL5로 작성하는 방법을 배우십시오. 모든 것이 거기에서 작동합니다.

개체 이름 변경이 없습니다. 기존 개체를 새 개체로 바꾸는 것으로 생각하십시오.

그럴 수 없다. 귀하의 코드는 모든 것이 뒤죽박죽입니다. 아마도 이것이 버튼에 지연이 있는 이유일 것입니다. 앞서 말했듯이 간단하게 시작하세요. 일을 복잡하게 만들지 마십시오. 간단한 작업이 시작되면 점차 복잡해지며 확신하게 될 것입니다.

이벤트(클릭)에 의해 트리거된 상태를 어떻게 볼 수 있습니까? 예, 하지만 mql4로 작성합니다. "C# 디버그 작업으로 작성하는 방법을 배우십시오"라고 말하는 것과 같습니다.

"올바르고 다층 목발없이." - 그래서 숨기는 물건은 목발입니다.

일반적으로 나는 모든 것을했고 모든 것이 https://gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418 작동합니다.
버튼을 클릭하면 모든 라인이 한 번에 생성되고 버튼 바의 위치에 따라 즉시 숨겨지고 하나만 남습니다. 또한 가격에 대한 커서의 위치에 따라 선이 숨겨지거나 표시됩니다.

Z.Y

mql4 곡선이 아니었다면 객체를 숨기면서 이 말도 안 되는 일을 할 필요가 없었을 것입니다. 모든 것이 객체 삭제/이름 변경과 함께 처음으로 작동했을 것입니다.

stop order button (public).mq4
stop order button (public).mq4
  • gist.github.com
GitHub Gist: instantly share code, notes, and snippets.
 
Nerd Trader # :

이벤트(클릭)에 의해 트리거된 상태를 어떻게 볼 수 있습니까? 예, 하지만 mql4로 작성합니다. "C# 디버그 작업으로 작성하는 방법을 배우십시오"라고 말하는 것과 같습니다.

"올바르고 다층 목발없이." - 그래서 숨기는 물건은 목발 입니다.

일반적으로 나는 모든 것을했고 모든 것이 https://gist.github.com/satorkain/0cf7a8df8ec1f4b3191defd04c94a418 작동합니다.
버튼을 클릭하면 모든 라인이 한 번에 생성되고 버튼 바의 위치에 따라 즉시 숨겨지고 하나만 남습니다. 또한 가격에 대한 커서의 위치에 따라 선이 숨겨지거나 표시됩니다.

Z.Y

mql4 곡선 이 아니었다면 객체를 숨기면서 이 말도 안 되는 일을 생각해낼 필요가 없었을 것이고 모든 것이 객체 삭제/이름 변경과 함께 처음으로 작동했을 것입니다.

개체를 숨기는 것은 개발자가 권장하는 방법일 뿐입니다. 그리고 이를 위한 특별한 속성이 있습니다. 상태를 보려면 버튼의 "상태" 속성을 확인해야 합니다.

여기에서 삐뚤어진 것은 논리와 개념의 대체입니다. 개발자가 권장하는 도구를 목발로 사용하고 객체의 끊임없는 탐욕스러운 생성/삭제를 순수한 코드로 취하지만 맹렬한 목발입니다. 권장되는 빠른 방법을 우회합니다.

그건 그렇고, 신속하게 다른 모든 개체 위에 개체를 만들려면 개체를 보이지 않게 하고 즉시 표시해야 합니다. 이렇게 하면 개체 목록에서 개체의 위치가 무시되고 상단에 표시됩니다.

추신. 그리고 거기에서도 git에 마이너스가 있는 C 코드를 게시했습니다. 절대적으로 오류에 강합니다. 한 줄이 생성되지 않으면 모든 것이 무너집니다. 이것은 즉시 내 눈을 사로 잡았습니다. 이벤트 핸들러에서 라인을 생성합니다. 이유는 무엇입니까? OnInit() 당신에게 무엇을 위해? 생성, 성공 확인 - 플래그를 설정하고 숨겼습니다. OnDeinit()에서 우리는 프로그램에 의해 생성된 객체를 삭제했습니다. 이렇게 하려면 이름 접두사도 필요합니다.

이벤트 핸들러에서는 표시하고 숨길 뿐입니다. 구성이 없어야 합니다. 귀하의 경우 그렇습니다.

나는 그런 것을 공개 도메인에 게시하는 것이 부끄럽습니다. 하지만 이것은 나를 위한 것입니다.

그리고 너? 사람들이 사용하는 것이 정상입니까?

 
Artyom Trishkin # :

개체를 숨기는 것은 개발자가 권장하는 방법일 뿐입니다. 그리고 이것을 위한 특별한 속성이 있습니다. 상태를 보려면 버튼의 "상태" 속성을 확인해야 합니다.

여기에서 삐뚤어진 것은 논리와 개념의 대체입니다. 개발자가 권장하는 도구를 목발로 사용하고 객체의 끊임없는 탐욕스러운 생성/삭제를 순수한 코드로 취하지만 맹렬한 목발입니다. 권장되는 빠른 방법을 우회합니다.

그건 그렇고, 신속하게 다른 모든 개체 위에 개체를 만들려면 개체를 보이지 않게 하고 즉시 표시해야 합니다. 이렇게 하면 개체 목록에서 개체의 위치가 무시되고 상단에 표시됩니다.

추신. 그리고 거기에서도 git에 마이너스가 있는 C 코드를 게시했습니다. 절대적으로 오류에 강합니다. 한 줄만 만들지 않아도 가치가 있습니다. 모든 것이 무너질 것입니다. 이것은 즉시 내 눈을 사로 잡았습니다. 이벤트 핸들러에서 라인을 생성합니다. 이유는 무엇입니까? OnInit() 당신에게 무엇을 위해? 생성, 성공 확인 - 플래그를 설정하고 . OnDeinit()에서 우리는 프로그램에 의해 생성된 객체를 삭제했습니다. 이렇게 하려면 이름 접두사도 필요합니다.

이벤트 핸들러에서는 표시하고 숨길 뿐입니다. 구성이 없어야 합니다. 귀하의 경우 그렇습니다.

나는 그런 것을 공개 도메인에 게시하는 것이 부끄럽습니다. 하지만 이것은 나를 위한 것입니다.

그리고 너? 사람들이 사용하는 것이 정상입니까?

필요에 따라 4줄 중 1줄을 만드는 폭식? :) 그리고 만약 200개의 라인이 있다면? 당신의 논리에 따라 한 번에 모두 생성하는 것이 경제적입니까? 그리고 이것은 개발자들이 구상한 것이기 때문에 자신만 알고 있고, 직관적으로 구상된 것은 아닙니다. 그것이 얼마나 믿을 수 없거나 비논리적이든 간에. 글쎄요, 이런 식으로 개체를 작업하는 데만 필요하고 그렇지 않은 경우에는 그렇지 않다는 것을 어떻게 알 수 있었습니까? 아마도 mql4 튜토리얼에서? 나는 이 점이 거기에 설명되어 있는지 의심스럽다.

최소한 의도한 대로 작동합니다. :) 거기에 대괄호(공개) 안의 이름, 즉 아직 완성되지 않았지만 예, 개체 생성에 대한 검사가 없으므로 수정하겠습니다. 그리고 붙여넣기 통이 기억나지 않아서 git에 올렸습니다. 부끄러운? 무엇보다도 Git은 사람들이 배우고, 경험 을 공유하고, 코드를 공유하고, 작업 여부는 중요하지 않으며, 자신에게 적합하지 않은 경우 누구나 포크하고 변경할 수 있습니다.

여기에서 250개의 개체가 생성되었으며 Expert Advisor의 작업 전반에 걸쳐 메모리에 보관됩니다. 알겠습니다. 알려드리겠습니다. 그것에 대해 나는 또한 "직관적이지 않은 논리"라고 말합니다. 예를 들어 OnInit()에 대한 튜토리얼에서는 Expert Advisor/indicator가 초기화될 때 함수가 처리된다는 점만 빼면 됩니다.

 
Nerd Trader # :


하나의 비밀을 알려드리겠습니다. "계산기"가 없으면 최소한 1000개 이상의 개체를 만들 수 있습니다. 그러나 그것은 그에게 달려 있습니다. 계산기는 컴퓨터입니다. 램 4GB. 아래의 모든 것은 "할머니의 점수"입니다... :) 따라서 적어도 한 번에 적어도 한 번에 하나씩 개체를 만드십시오. 차이 없음. 그러나 광신 없이.

따라서 현명하게 수행하면 모든 사람에게 모든 것이 잘됩니다! ...

 
Nerd Trader # :

필요에 따라 4줄 중 1줄을 만드는 폭식? :) 그리고 만약 200개의 라인이 있다면? 당신의 논리에 따라 한 번에 모두 생성하는 것이 경제적입니까? 그리고 이것은 개발자들이 구상한 것이기 때문에 자신만 알고 있고, 직관적으로 구상된 것은 아닙니다. 그것이 얼마나 믿을 수 없거나 비논리적이든 간에. 글쎄요, 이 방법으로만 개체를 작업하면 되며 그렇지 않은 경우에는 그렇지 않다는 것을 제가 어떻게 알 수 있었습니까? 아마도 mql4 튜토리얼에서? 나는 이 점이 거기에 설명되어 있는지 의심스럽다.

최소한 의도한 대로 작동합니다. :) 거기에 대괄호(공개) 안의 이름, 즉 아직 완성되지 않았지만 예, 개체 생성에 대한 검사가 없으므로 수정하겠습니다. 그리고 붙여넣기통이 기억나지 않아서 git에 올렸습니다. 부끄러운? 무엇보다도 Git은 사람들이 배우고, 경험 을 공유하고, 코드를 공유하고, 작업 여부는 중요하지 않으며, 자신에게 적합하지 않은 경우 누구든지 포크하고 변경할 수 있습니다.

여기에서 250개의 개체가 생성되었으며 Expert Advisor의 작업 전반에 걸쳐 메모리에 보관됩니다. 알겠습니다. 알려드리겠습니다. 그것에 대해 나는 또한 "직관적이지 않은 논리"라고 말합니다. 예를 들어 OnInit()에 대한 튜토리얼에서는 Expert Advisor/indicator가 초기화될 때 함수가 처리된다는 점만 빼면 됩니다.

필요한 만큼 동시에 많은 개체를 만들 수 있습니다. MT는 표시기 버퍼를 만드는 측면에서 완전히 개발되지 않았지만 추세선이 있는 400개의 가시적인 양초, 양초당 5개의 선, 400 * 5 = 2000, 그리고 각각에 대해 하나의 객체를 더하는 것이 필요했습니다. 총 약 2500개의 개체가 획득되었습니다. 어리둥절하지 않고 일했습니다.

당신은 객체로 작업하는 논리를 완전히 이해하지 못하지만 논쟁하는 방법은 알고 있습니다. 반대로 하는 것이 좋습니다.

 
Nerd Trader # :

필요에 따라 4줄 중 1줄을 만드는 폭식? :) 그리고 만약 200개의 라인이 있다면? 당신의 논리에 따라 한 번에 모두 생성하는 것이 경제적입니까? 그리고 이것은 개발자들이 구상한 것이기 때문에 자신만 알고 있고, 직관적으로 구상된 것은 아닙니다. 그것이 얼마나 믿을 수 없거나 비논리적이든 간에. 글쎄요, 이 방법으로만 개체를 사용하고 다른 방법으로 작업하는 것이 필요하지 않다는 것을 어떻게 알 수 있었습니까? 아마도 mql4 튜토리얼에서? 나는 이 점이 거기에 설명되어 있는지 의심스럽다.

최소한 의도한 대로 작동합니다. :) 거기에 대괄호(공개) 안의 이름, 즉 아직 완성되지 않았지만 예, 개체 생성에 대한 검사가 없으므로 수정하겠습니다. 그리고 붙여넣기통이 기억나지 않아서 git에 올렸습니다. 부끄러운? 무엇보다도 Git은 사람들이 배우고, 경험 을 공유하고, 코드를 공유하고, 작업 여부는 중요하지 않으며, 자신에게 적합하지 않은 경우 누구든지 포크하고 변경할 수 있습니다.

여기에서 250개의 개체가 생성되었으며 Expert Advisor의 작업 전반에 걸쳐 메모리에 보관됩니다. 알겠습니다. 알려드리겠습니다. 그것에 대해 나는 또한 "직관적이지 않은 논리"라고 말합니다. 예를 들어 OnInit()에 대한 튜토리얼에서는 Expert Advisor/indicator가 초기화될 때 함수가 처리된다는 점만 빼면 됩니다.

좋은. 간단한 단어로 러시아어로 시도해 보겠습니다.

당신은 낚시를 가고 있습니다.

  1. 집에서 그들은 식료품 저장실을 열고 뒷머리를 긁적이며 닫았습니다.
  2. 낚시하러 왔는데 낚싯대가 필요해
  3. 낚싯대를 사러 집에 가자
  4. 우리는 낚시하러 와서 미끼를 던지고 물고기를 잡았고 그물이 필요했습니다
  5. 그물을 사러 식료품 저장실에 집으로 가자
  6. 우리가 낚시하러 왔다가 잡은 물고기를 갈고리에 걸고 그물로 낚싯대에 떠다니니 잡은 물고기를 접을 그릇이 필요하시더라
  7. 집에 가자..... 계속 할까?

그리고 식료품 저장실(OnInit)에서 낚시에 필요한 모든 것을 즉시 가져오고, 뛰어다니지 않고 낚시를 가고, 집에 돌아와 모든 것을 식료품 저장실과 냉장고(OnDeinit)에 넣을 수 있습니다.

여기 포럼에서 이에 대해 알 수 있습니다 . 때때로 당신은 그들이 당신에게 말하는 것을 듣고 경청해야 합니다.

그리고 그들은 질문을 하고 답을 얻었습니다. 그들은 쓰레기라고 말했습니다. 그리고 당신은 생각하는 대로 행동합니다.

먼저 질문에 대해 생각하고 주변에 물어본 다음 편집자를 맡을 필요가 있습니다.

프로그래밍에서 가장 쉬운 것이 코드를 입력하는 것이라는 사실을 알고 계십니까? 그리고 개발의 가장 큰 부분은 논리에 대한 생각에 있습니다.

 

두 번째 질문을 드려 죄송합니다.

하지만 문제가 있습니다. 내가 아직 풀지 못한 것, 즉

하나의 양초에서 일련의 주문(연이어)을 엽니다.

동일한 양초에 대해 새 주문을 열 수 없도록 EA가 필요합니다.

Sleep() 을 통해 해결할까 생각했는데 마카는 그 과정을 멈추지 않는 게 낫다고 했다.

문제.

이제 코드는 다음과 같습니다.

 // Параметры советника
input string   sParametersEA = "" ;     // Параметры советника
input double   Lot           = 0.01 ;   // Количество лотов
input int      StopLoss      = 30 ;     // Уровень убытка
input int      TakeProfit    = 30 ;     // Уровень прибыли
input int      Slippage      = 3 ;       // Проскальзование (в пунктах)
input int      Magic         = 1 ;       // Индентификатор советника
input double   K_Martin1     = 2.0 ;     // Множитель мартин 1
input double   K_Martin2     = 2.0 ;     // Множитель мартин 2
input double   K_Martin3     = 2.0 ;     // Множитель мартин 3
input int      OrdersClose   = 5 ;       // Ограничение лотности мартин1
input int      OrdersClose2  = 5 ;       // Ограничение лотности мартин2
input int      DigitsLot     = 2 ;       // Точность лотности
// Параметры индикатора
input string   sParametersMA = "" ;     // Параметры индикатора
input int      PeriodMA      = 14 ;     // Период мувинга
input int      MovingShift   = 1 ;       // Сдвиг мувинга
// Глобальные переменные
string AC;
datetime Start;
double dMA;
double MaxMartinLot;
double MaxMartinLot2;
//+-----------------------------------------------------------------------------------------------+
int OnInit ()
  {
Start          = TimeCurrent ();
MaxMartinLot   = Lot* MathPow ( 1.4 ,OrdersClose);
MaxMartinLot2  = Lot* MathPow (K_Martin2,OrdersClose2);
AC             = StringConcatenate ( " " , AccountCurrency());
return ( INIT_SUCCEEDED );
  }
//+-----------------------------------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {

  }
//+-----------------------------------------------------------------------------------------------+
void OnTick ()
  {
// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
   }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция проверки открытых оредров |
//+-----------------------------------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt= 0 ;
   int i= OrdersTotal ()- 1 ;
   for ( int pos=i;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol()== _Symbol )
           {
             if (OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return (cnt);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на покупку |
//+-----------------------------------------------------------------------------------------------+
bool bSignalBuy()
  {
   if (dMA > Open[ 1 ] && dMA < Close[ 1 ])   //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if (dMA < Open[ 1 ] && dMA > Close[ 1 ])
       return ( true );

   return ( false );
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на покупку |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenBuy()
  {
// Тикет ордера
   int iOTi = 0 ;   

   iOTi = OrderSend ( Symbol (), OP_BUY, LOT(), Ask, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );
   
// Проверим открылся ли ордер
   if (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
// Если нет, то получим ошибку
      vError( GetLastError ());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                            Функция открытия ордера на продажу |
//+-----------------------------------------------------------------------------------------------+
void vOrderOpenSell()
  {
// Тикет ордера  
   int iOTi = 0 ;   
//Print(bCheckOrders());
   iOTi = OrderSend ( Symbol (), OP_SELL, LOT(), Bid, Slippage, 0 , 0 , "" , Magic, 0 , clrNONE );

// Проверим открылся ли ордер
   if (iOTi > 0 )
// Есди да, то выставим уровни убытка и прибыли
      vOrderModify(iOTi);
   else
// Если нет, то получим ошибку
      vError( GetLastError ());
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                    Функция модификации ордера |
//+-----------------------------------------------------------------------------------------------+
void vOrderModify( int iOTi)
  {
   int     iOTy = - 1 ;     // Тип ордера
   double dOOP = 0 ;     // Цена открытия ордера
   double dOSL = 0 ;     // Стоп Лосс
   int     iMag = 0 ;     // Идентификатор советника
   double dSL  = 0 ;     // Уровень убытка
   double dTP  = 0 ;     // Уровень прибыли

// Выберем по тикету открытый ордер, получим некоторые значения
   if ( OrderSelect (iOTi, SELECT_BY_TICKET, MODE_TRADES))
     {
      iOTy = OrderType();
      dOOP = OrderOpenPrice();
      dOSL = OrderStopLoss();
      iMag = OrderMagicNumber();
     }

// Если ордер открыл данный советник, то входим в условие
   if (OrderSymbol() == Symbol () && OrderMagicNumber() == iMag)
     {
// Если Стоп Лосс текущего ордера равен нулю, то модифицируем ордер
       if (dOSL == 0 )
        {
         if (iOTy == OP_BUY)
           {
            dSL = NormalizeDouble (dOOP - StopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP + TakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }

         if (iOTy == OP_SELL)
           {
            dSL = NormalizeDouble (dOOP + StopLoss * Point , Digits );
            dTP = NormalizeDouble (dOOP - TakeProfit * Point , Digits );

             bool bOM = OrderModify(iOTi, dOOP, dSL, dTP, 0 , clrNONE );
           }
        }
     }
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                                      Функция обработки ошибок |
//+-----------------------------------------------------------------------------------------------+
void vError( int iErr)
  {
   switch (iErr)
     {
       case 129 :   // Неправильная цена
       case 135 :   // Цена изменилась
       case 136 :   // Нет цен
       case 138 :   // Новые цены
         Sleep ( 1000 );
         RefreshRates();
         break ;

       case 137 :   // Брокер занят
       case 146 :   // Подсистема торговли занята
         Sleep ( 3000 );
         RefreshRates();
         break ;
     }
  }
//+-----------------------------------------------------------------------------------------------+
double LOT()
{
   int n= 0 ;
   int m= 0 ;
   int v= 0 ;
   double OL=Lot;
   for ( int j = OrdersHistoryTotal()- 1 ; j >= 0 ; j--)
   {
       if ( OrderSelect (j, SELECT_BY_POS,MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol () && OrderMagicNumber() == Magic)
         {
             if (OrderProfit()> 0 ) 
            {

               if (n== 0 ) OL= NormalizeDouble (OrderLots()+K_Martin1,DigitsLot);
               n++;
               
               if ((OL>=MaxMartinLot)&& (m== 0 )) OL= NormalizeDouble (OrderLots()*K_Martin2,DigitsLot);
               m++;
               
               if ((OL>=MaxMartinLot2) && (v== 0 )) OL= NormalizeDouble (OrderLots()*K_Martin3,DigitsLot);
               v++;
            }
             else
            {
               if (n== 0 ) { return (Lot);}
               else { return (OL);}
            }
         }
      }
   }
   
   return (OL);
}
 
законопослушный гражданин # :

동일한 양초에 대해 새 주문을 열 수 없도록 EA가 필요합니다.

 void OnTick ()
  {
   datetime cTime;
   static datetime time = 0 ;

  cTime = iTime (NULL, PERIOD_CURRENT, 0 );

   if (time != cTime)
    time = cTime;
   else
     return ;

// Получим значение индикатора
   dMA = iMA ( Symbol (), 0 ,PeriodMA, MovingShift, MODE_SMA , PRICE_CLOSE , 0 ); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
       if (CountOrders()== 0 )
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
       if (bSignalBuy() == true )
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
       if (bSignalSell() == true )
         vOrderOpenSell();
     }
   }