0
Вторая склейка:
void PutOrder(int type,double price,int mn)
{
   int r=0;
   color clr=Green;
   sl=0;tp=0;

   if(type==OP_SELL || type==OP_SELLSTOP || type==OP_SELLLIMIT)
     {
      clr=Red;
      if(SL>0)
         sl=NormalizeDouble(price+sl,_Digits);
      if(TP>0)
         tp=NormalizeDouble(price-tp,_Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(SL>0)
         sl=NormalizeDouble(price-sl,_Digits);
      if(TP>0)
         tp=NormalizeDouble(price+tp,_Digits);
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,_Digits),Slip,sl,tp," ",0,clr);
   return;
}
//+------------------------------------------------------------------+
//|   Подсчёт отложенных ордеров Ветви Sell                          |
//+------------------------------------------------------------------+
int CountLimVS(int type)
{
     int count=0;
   	
     for(int i=OrdersTotal()-1; i>=0; i--)
         {
   		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==SMB)
				if(OrderType()==type)
					 count++;
      	}
  return(count);
}
//+------------------------------------------------------------------+
//|     Счётчик  всех  открытых  ордеров  ветки  Sell                |
//+------------------------------------------------------------------+
int CountOpenVS()
{
	int count=0;
	
   for(int i=OrdersTotal()-1; i>=0; i--)
      {
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==SMB)
			if(OrderType() == OP_BUY || OrderType() == OP_SELL)
				if(OrderMagicNumber()==MagicSell)
					count++;
   	}
  return(count);
}
//+------------------------------------------------------------------+
//|        Закрытие всех открытых ордеров                            |
//+------------------------------------------------------------------+
void CloseAllOpen()
{
  bool cl;
	
  for(int i=OrdersTotal()-1; i>=0; i--)
     {
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
			if(OrderSymbol()==SMB && OrderMagicNumber()==MagicSell)
   			{
				if(OrderType()==OP_BUY)
   				{
					RefreshRates();
					cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,clrWhite);
   				}
				if(OrderType()==OP_SELL)
   				{
					RefreshRates();
					cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,clrWhite);
   				}
   			}
   	}
}
//+------------------------------------------------------------------+
//|       Удаление всех отложенных ордеров                           |
//+------------------------------------------------------------------+
void DelLimOrderVS()
{
	for(int i=OrdersTotal()-1; i>=0; i--)
   	{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
			if(OrderSymbol()==SMB && OrderMagicNumber()==MagicSell)
				if(OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP || OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT)
					if(!OrderDelete(OrderTicket()))
						Print(__FUNCTION__," Ошибка № ",GetLastError()," при удалении отложенного ордера");
   	}
}
//+------------------------------------------------------------------+
//|       Профит всех открытых ордеров                               |
//+------------------------------------------------------------------+
double AllProfit()
{
   	double profit=0;
      for(int i=OrdersTotal()-1; i>=0; i--)
        {
   		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
   			if(OrderSymbol()==SMB && OrderMagicNumber()==MagicSell)
   				if(OrderType()== OP_BUY || OrderType()== OP_SELL)
   					profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
  return(profit);
}
//+------------------------------------------------------------------+
avatar

kvashnin007

  • 17 февраля 2026, 16:56
0
#property strict

extern double         Loss           = 590;          // убыток в валюте
extern double         Profit         = 2;            // профит в валюте
extern int            SL             = 1;            // Stop Loss
extern int            TP             = 1;            // STake Profit
extern int            Distance       = 4;            // дистанция отложек
extern int            StepTrail      = 7;            // шаг трала отложек
extern double         Lots           = 0.8;          // лот
extern double         LotK           = 2.5;          // увеличение лота
extern double         MaxLot         = 14.7;         // максимальный лот
extern int            Slip           = 30;           // проскальзывание
extern int            MagicSell      = 1961;         // магик продажа
//---
double buy=0,sel=0,MinLevel,PNT,dist, TralStep,sl,tp;
int    numVS=0;
string SMB;
double BuyPriceMax,SelPriceMin,LotBuyMax,LotSellMin,
       op,lt,pr,ProfitBuy,ProfitSell,StartLot;
int    tk,SchBuy,SchSell,SchRyn;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
	  SMB  = Symbol();
	  PNT  = MarketInfo(SMB,MODE_POINT);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
     MinLevel = (int)MarketInfo(NULL,MODE_STOPLEVEL);
	  TralStep = StepTrail*PNT;
	  dist     = (Distance + MinLevel)*PNT;
     sl       = (SL + MinLevel)*PNT;
     tp       = (TP + MinLevel)*PNT;
     
// При достижении профита или убытка больше уствновленных, закрываются все ордера, удаляются все отложки и начинается новый цикл.
// Эта функция, фрктически, является и SL и более ТР для ордеров. Так проще, лучше и эффективнее, чем SL и ТР отдельных ордеров.
     
     if((AllProfit()>Profit && Profit!=0) || (-AllProfit()>Loss && Loss!=0))
        {
   	  CloseAllOpen();          // закрытие всех открытых ордеров
   	  DelLimOrderVS();        // удаление всех отложек
   	  }
     // ----------------------------------- Установка стартового ордера -----------------------------------------------
     
// Если нет открытых ордеров, то удаляются все отложенные ордера и открывается OP_SELL ордер стартовым лотом. Начало цикла.
// Дальше обвязывается тремя ордерами. На Distance ниже SellStop, выше на Distance SellLimit и на Distance*1.5 ордер BuyStop.
// Все ордера выставляются также стартовым лотом.
   
     if(CountOpenVS()<1)                                            // Если открытых ордеров ветки Sell (VS)нет
        {
        DelLimOrderVS();                                            // удаление всех отложенных ордеров ветки Sell 
        
        PutOrder(OP_SELL, Bid, MagicSell);                          // открываем Sell ордер ветки Sell
      	 
        if(CountLimVS(OP_SELLLIMIT)<1)                              // если нет SellLimit ордеров ветки Sell,
           {
           sel = NormalizeDouble(Bid+MinLevel+dist,_Digits);
           PutOrder(OP_SELLLIMIT, sel, MagicSell);                  // выставляем SellLimit ордер
           }
        if(CountLimVS(OP_BUYSTOP)<1)                                // а если нет BuyStop ордеров ветки Sell,
       	  {
           buy = NormalizeDouble(Ask+(MinLevel+dist)*1.5,_Digits);
           PutOrder(OP_BUYSTOP,buy, MagicSell);                     // выставляем BuyStop ордер
           }
        if(CountLimVS(OP_SELLSTOP)<1)                               // если нет SellStop ордеров ветки Sell,
           {
           sel = NormalizeDouble(Bid-MinLevel-dist,_Digits);
           PutOrder(OP_SELLSTOP, sel, MagicSell);                   // выставляем SellLimit ордер
           }
        numVS = CountOpenVS(); 
        }
     //------------------------------------ открытие последующих ордеров ---------------------------------------------
     
// Если количество открытых ордеров OP_SELL стало больше, значит сработала какая-то SELL отложка.
// Удаляем все оставшиеся(юся)отложки(у).
// Дальше обвязывается тремя ордерами. На Distance ниже SellStop стартовым лотом умноженном на LotK, 
// выше на Distance выставляем SellLimit  стартовым лотом и на Distance*1.5 ордер BuyStop стартовым лотом.
     
     if(numVS<CountOpenVS())              // Если увеличелось количество открытых ордеров ветки Sell,
        {
        DelLimOrderVS(); 
        }                     // удаляем все отложки ветки Sell.
}
//+------------------------------------------------------------------+
//|      Определение цены последнего открытого ордера ветви Sell     | 
//+------------------------------------------------------------------+
double LastOrderPriceVS()
{      
	double   price = 0;
	datetime time  = 0;
	
	for(int i=0; i<=OrdersTotal()-1; i++)
   	{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
			if(OrderSymbol()==SMB && OrderMagicNumber()==MagicSell)
				if(OrderType()==OP_SELL)
					if(time < OrderOpenTime())
   					{
						price = OrderOpenPrice();
						time = OrderOpenTime();
   					}
   	}
	return(price);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
avatar

kvashnin007

  • 17 февраля 2026, 16:55
0
Гигачату тоже надо правильно задачу поставить. А не только АМ2.
avatar

kvashnin007

  • 22 сентября 2025, 19:02
0
Сигналом открытия (выставления рыночного ордера) будет:
а) Свеча закрылась за границей канала TMA_Centered_H1_V2_VS — это самое важное условие!!!
б) есть сигнал (ромб от TMA+CG (красный либо синий) причем сигнал может появиться при формировании новой свечи


Как вариант…

А если рассмотреть другой: на ромбы не ориентируемся от слова вообще. Ромб — свеча закрылась в направлении против выхода из полосы. Относительно надежный, но… малоприбыльный. Если вы уж хотите закрытия свечи вне полосы, то логичнее было бы рассмотреть возврат цены в полосу. Или, если свеча закрылась за полосой, например выше, то ожидаем свечу которая закроется либо вниз, либо, ак вариант, текущая цена станет ниже цены открытия предыдущей свечи. Тогда OP_SELL.
avatar

kvashnin007

  • 14 сентября 2025, 17:39
0
И да. Есть у меня свои и чужие советники, которые работают без strict.
avatar

kvashnin007

  • 24 августа 2025, 14:13
0
Вы таки не поняли смысла моего умозаключения. Я не за ошибки говорю, а за замечания. Желтенькие треугольники. С ними советник всеже может работать. Как и сколько — другой вопрос. С ошибками (красные кружочки), конечно же не будет даже устанавливаться.
avatar

kvashnin007

  • 24 августа 2025, 14:10
0
Скорее всего Вы правы. Но 98 замечаний тоже сильно влияют на работу совы. Возможно, сильнее, чем строгость. Уходит корректность и повторяемость.
Лучший вариант: оставить strict и поработать над замечаениями. Тем более, что это муторно, но не так сложно.
avatar

kvashnin007

  • 24 августа 2025, 11:06
0
Хорошо. Это самый простой вариант, я так думаю.
avatar

kvashnin007

  • 23 августа 2025, 09:46
0
98 замечаний. Удивляюсь, как сова вообще может устанавливаться.

На счет Elise. Control+H, Все Elise заменить на пробел. Их там 13 штукОВ.
Забаньте (//) strict в стр.16. Или удалите строку. Объявите глобальную переменную int i =0; В поиске найти по очереди все int i и у всех, кроме глобальной, удалите int. Останется только 27 замечаний. Их тоже желательно побороть.
Программист я хреновый, сам советник не устанавливал и не запускал. Просто мои мысли.

Пробуйте.
avatar

kvashnin007

  • 23 августа 2025, 08:36
0
Ну чтобы попробовать помочь, надо хотя бы сам советник. Ссылка не рабочая. И вообще админу сайта надо пеесмотреть работу сайта. Особенно в вопросе ссылок.
avatar

kvashnin007

  • 23 августа 2025, 08:05
0
Aleh7999, привет. Со ссылками хрень какая=то. Открываю страницу, копирую адресную строку и вношу в текст.
Ан… не открывается. Чудеса.

Даже не знаю, как правильно отправить ссылку. Нажмите на мою морду лица и посмотрите записи в блоге. Там найдете искомое.

Там я и писал, что верхняя линия строится по high, а нижняя по low. Это за большой период. За малый период М1 тоже строятся две центральные линии по high и low. Период у у мелкого 2-7, а у крупного, как писал выше. А подробнеенай найдете в моем блоге, как и первый раз.

Да… и на счет какой индюк. Не помню. Пишу на работе. Взял, что здесь есть. Это чисто для прмера. Идея. А вы берите не рисующий.
Да… в моем примере все построения на М1.

Первый блог называется: Что такое ТМА и как его пользовать.
Второй: Как из любого индюка самостоятельно сделать мультитаймфрейм индикатор.
avatar

kvashnin007

  • 21 августа 2025, 11:30
0
Писал в другом месте. Переношу сюда.

А идея использовать два индикатора не нова, но, если к ней отнестись хорошо подумав, можно получить неплохие результаты.

Выскажу свои соображения на эту тему, а Вы сами решайте (проверяйте) подходит для Вас или нет.

TMA+CG mladen NRP TEAMTRADER2 buy sell относится к разряду не перерисовывающихся, но… Посмотрите его в тестере. Потом ререзапустите индикатор (открыть- закрыть свойства) и заметите, что, если по ходу прогона в тестере он не рисовал, то после перезапуска изменит свои показания и при одинаковых переменных он станет один в один с TMA_Centered_H1_V2_VS. Но при торговле он не перерисовывается. Можно строить стратегии, глядя на результаты прогона индюка в тестере. Надо быть внимательным к этому.
Подробнее об этом я писал здесь kvashnin007.opentraders.ru/133015.html.

А если Вы хотите два индюка, то рассмотрите вариант, например, такой:
1. Оба не прерисовывающиеся. Например TMA+CG mladen NRP TEAMTRADER2 buy sell.
2. Один ставите на М1 с переодом, например, 5. Второй ставите тоже на М1, но спериодом, соответсвующим М15. Т.е. с периодом в пятнадцать раз больше. Т.е. 5*15=75. Об этом я тоже писал kvashnin007.opentraders.ru/133013.html#comment175740

У вас получится похожая картинка



Работать теперь надо вверху с черной верхней линией, а внизу — с черной нижней. Можно улучшить картинку (и, соответствено, и результат), если верхние линии рисовать по high, а нижние по low.

Думайте. Решайте.
avatar

kvashnin007

  • 15 августа 2025, 20:03
0
Пожалуй продолжу.
Хоть один смотрящий, но объявился. Возможно еще кто ни будь заинтересуется.

Блин, не могу никак успокоиться. Этот… студент довел до каления. А как ты сам сможешь показать на реале что-то там и утверждать, что это на ТМА? Или с помощью ТМА. Да и вообще с чъей-то помощью.
Умник, блин.Болтает ерундой за тридцать сребников.

Я сделал индикатор, в котором одна верхняя средняя ТМА и верхняя красная построена по цене high, а втрая пара по low.

Индикатор полностью не рисующий. А картинка выглядит так:



Не такой красивый, как рисующий индюк. Зато реальный и при торговле, и на истории.

Такой канал, построенный на хай -лоу, лучше отрабатывает на границах. Плюс у вас есть три четких линии, при касании которой можно применить тот или иной вариант фиксации или иной заботы за прибылью.

Например: на первой линии переводим ордер в БУ+. На второй закрываем треть ордера, а SL остатку переводим на первую среднюю линию. На границе канала закрываем еще половину остатка ордера, а оставшемуся остатку выставляем тралSL. Вариантов тьма. Надо учитывать спред, ширину канала, волатильность пары и пр. Выбирай — не хочу.
avatar

kvashnin007

  • 15 августа 2025, 19:23