Уважаемый Vorchunozavr , куда эту строчку воткнуть ? Я его накорябал с готовых рабочих советников, и благодоря урокам,но пока еще не могу уловить как самостоятельно написать то или иное условие.По этому прошу помощи,мне увидеть надо что я сделал не правильно или не дописал.
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
//+------------------------------------------------------------------+
void Tralling()
{
for (int i=0; i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrallingStop * Point)
{
if(OrderStopLoss() {
Sl = NormalizeDouble(Bid - TrallingStop * Point,Digits);
if(OrderStopLoss() !=Sl)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- Здесь
}
}
}
if(OrderType() == OP_SELL)
{
if(Ask - OrderOpenPrice() > TrallingStop * Point)
{
if(OrderStopLoss() > Ask+(TrallingStop + TrallingStep) * Point)
{
Sl = NormalizeDouble(Ask + TrallingStop * Point,Digits);
if(OrderStopLoss() !=Sl)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0); //-- и здесь
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
Программе нужно сказать, что мы тейк профит оставляем прежний, т.е. - OrderTakeProfit(). Если поставить 0, она TP уберёт, потому:
Цитатаисчезает тейк профит
А есть возможность и время если не затруднит написать простенький советник сигнальщик? Чтоб сигналил на втором баре при изменении тренда. Даже есть образец только индикатор поменять надо.
Изменено 12 сентября, 2013 пользователем ss1975
Уважаемый Vorchunozavr Спасибо за код. Еще просьба посмотри почему он ордера не удаляет в указанное время ?
По коду: если пришло время и если имеем 2 ордера, один бай или селл, другой отложенный, то отложенник должен удалиться.
А зачем мы проверяем количество ордеров? И если рыночный закрылся по профиту или СЛ?
Если нам нужно просто удалить ордера, лучше без лишних условий: время пришло и мэджик наш - удаляем (в конце второго урока это есть).
:)
Здравствуйте xbms.
Если уроки по программированию ещё не закончены, то хочу предложить написать очень полезный индикатор. Это будет индикатор определения флета. Этот индикатор может быть использован для исследования рынка, а также для более точного входа в рынок при трендовых стратегиях. Мы задаём всего два переменных параметра, это ширина флета и величина выхода цены в пунктах из канала флета, при которой будем считать данный флет законченным. Такой участок флета должен быть графически отмечен на графике и иметь информацию о том, сколько раз цена сходила от стенки до стенки канала. Это на истории. Текущий флет также должен быть выделен графически и иметь информацию о количестве уже пройденных колен. Этот индикатор нам поможет выявить на истории такие закономерности появления флета заданной ширины, как время, уровни, частоту, количество колен, оптимальную ширину и т.д. Измерение текущего флета позволит войти в рынок на несколько колен позже по известной цене и направлению.
С уважением turu.
Доброго времени, господа программисты.Помогите разобраться с таким делом при тестировании в журнале выдает OrderModify error 130 еще бывает ошибка 4108 и последние что я увидел это OrderModify error 1.Посмотрите код,помогите исправить этот недостаток ПЛИЗ ;)
Добавлено: 19-09-2013 17:21:01
Вот еще что забыл описать,когда присходит модификация,например на бай,то стоп лосс тянет как положенно вверх,то на оборот опускает вниз одного и того же ордера.Отсюда и шибки я так понимаю,помогите разобраться с ним !!!
Изменено 19 сентября, 2013 пользователем denis77515
if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD))
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);
(maxprice+Ask)/Point - Это очень много и условие будет выполняться всегда.
(1,3560+1,3530)/0,0001=
Для SellStop тоже неправильно.
Трал:
У машины с интуицией туговато и условия if(OrderStopLoss() !=Sl) недостаточно. Если нам не нужно, чтобы СЛ снижался (для Бай), значит надо написать, что новый СЛ должен быть выше старого. И текущая цена не должна быть слишком близко...
//+------------------------------------------------------------------+
void Tralling()
{
for (int i=0; i {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if(OrderType() == OP_BUY)
Sl = NormalizeDouble(GetMinPrice() - Indent * Point,Digits);
{
if(OrderStopLoss() !=Sl && OrderStopLoss() MarketInfo(Symbol(),MODE_SPREAD)*2)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0);
}
if(OrderType() == OP_SELL)
Sl = NormalizeDouble(GetMaxPrice() + Indent * Point,Digits);
{
if(OrderStopLoss() !=Sl && OrderStopLoss() > Sl && (Sl - Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)*2)
OrderModify(OrderTicket(),OrderOpenPrice(),Sl,OrderTakeProfit(),0);
}
}
}
}
}
//+------------------------------------------------------------------+
Спасибо за трелинг,а как это исправить.Вернее правильно написать ?
if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD))
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);
Старайтесь писать комментарии к функциям, условиям и т.п. Например:
if((maxprice+Ask)/Point > MarketInfo(Symbol(),MODE_SPREAD)) // Проверяем где находится текущая цена относительно
// нашего BUYSTOP, если цена выше или слишком
// близко (уровень спреда) - ордер не установится.
OrderSend(Symbol(),OP_BUYSTOP,Lots,maxprice,Slippage,Sl,TP,"",Magic,0,Blue);
Написано почти правильно, только для BUYSTOP надо if(Ask ,
а для SELLSTOP if((Bid > minprice + MarketInfo(Symbol(),MODE_SPREAD)*2*Point).
Изменено 20 сентября, 2013 пользователем Vorchunozavr
Привет всем уважаемым форумчанам
Прошу помочь, есть сетка ордеров, в которой имеются рыночные разнонаправленные ордера
Покажите пример, как написать цикл, с помощью которого необходимо найти ближайший к последнему открытому ордеру того же направления прибыльный ордер и модифицировать его, установив стоплосс на уровне его открытия (то есть безубыток)
Привет всем уважаемым форумчанам
Прошу помочь, есть сетка ордеров, в которой имеются рыночные разнонаправленные ордера
Покажите пример, как написать цикл, с помощью которого необходимо найти ближайший к последнему открытому ордеру того же направления прибыльный ордер и модифицировать его, установив стоплосс на уровне его открытия (то есть безубыток)
Привет!
Рекомендую заглянуть сюда: http://tradelikeapro.ru/izuchaem-mql-urok-n-2-tsiklyi-funktsii-i-ordera-v-sovetnike/
а ещё лучше, просмотреть весь цикл уроков... времени отнимет не так много, а знаний получите вполне приличных...
Спасибо Vorchunozavr за подсказку,еще такая вещь как научить советника закрывать ордер частями,например достиг опоределенного количества пунктов,закрыл часть,достиг еще,опять закрыл,а третья часть либо стопу,либо тейку закроется.научите,покажите люди ????? :d
Написать могу, научить - сложнее :)
Обычный OrderClose, только вписать какой объём закрываешь.
Лучше оформить как функцию.
Во внешние переменные LotsClose, Profit_1, Profit_2 (Если Lots=0,1, то LotsClose=0,03. Профиты в пунктах, если есть проверка на знаки, то их тоже множим...)
//+------------------------------------------------------------------+
void PartClose()
{ for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderLots() {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if ((Bid - OrderOpenPrice())/Point >= Profit_1 && OrderLots() > Lots - LotsClose)
OrderClose(OrderTicket(), LotsClose, Bid, Slippage);
if ((Bid - OrderOpenPrice())/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2)
OrderClose(OrderTicket(), LotsClose, Bid, Slippage);
}
if (OrderType() == OP_SELL)
{
if ((OrderOpenPrice() - Ask)/Point >= Profit_1 && OrderLots() > Lots - LotsClose)
OrderClose(OrderTicket(), LotsClose, Ask, Slippage);
if ((OrderOpenPrice() - Ask)/Point >= Profit_2 && OrderLots() > Lots - LotsClose*2)
OrderClose(OrderTicket(), LotsClose, Ask, Slippage);
}
}
}
}
}
}
//+------------------------------------------------------------------+
Не проверял....
Вопрос уважаемым программистам. Как заставить советник торговать на offline М2 графике ренко (график генерируется индикатором RenkoLiveChart v2.1) ?
[quote
Привет Серега.Прежде хочу поблагодарить тебя и всю вашу команду за ваши труды.Уроки несомненно полезные, но мне кажется , что надо немного добавить примеров , например пример на пересечении скользящих средних, пример для стрелочных индикаторов, и потом как их совместить и создать условие для входа от нескольких индикаторов, то есть сделать, что-то наподобие шаблонов, чтобы в них потом можно было бы вписывать только параметры индикаторов.Я новичок в этом деле но мне кажется такому варианту были бы рады многие начинаюсчие трейдеры которые хотят создать свой советник. Но а теперь хочу обратится за помощью, никак не могу найти в чем ошибка .Из твоих уроков Сергей я взял код для советника построенный на индикаторе ТМА и решил к нему дабавить мартин, результат такой , что на покупку работает идеально , а вот на продажу почему то открываются ордера с каждым тиком нннннннн-количество штук пока не исчерпает весь депозит если нетрудно не сможешь помочь с этой проблемой , вот код
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| TMA.mq4 |
//|
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "
extern double Lots = 0.1;
extern int TakeProfit = 10;
extern int StopLose = 100;
extern int Slippage = 5;
extern string comment = "TMA BOT";
extern int Megic = 111;
extern string Indi = "Данные индикатора";
extern string TimeFrame = "current time frame";
extern int HalfLength = 34;
extern int Price = PRICE_CLOSE;
extern double ATRMultiplier = 1.0;
extern int ATRPeriod = 100;
extern bool Interpolate = true;
extern int Step = 10;
extern double Multiplier = 1;
double PriceHigh, PriceLow, SL, TP, price, lastlot;
int ticket;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
Step *= 10;
Slippage *= 10;
StopLose *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom(Symbol(), 0, "TMA with Distances" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 1, 0);
PriceLow = iCustom(Symbol(), 0, "TMA with Distances" , TimeFrame, HalfLength, Price, ATRMultiplier, ATRPeriod, Interpolate, 2, 0);
if (Bid >= PriceHigh && CountSell() == 0)
{
SL = NormalizeDouble(Bid + StopLose * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Megic, 0, Red);
if (ticket > 0)
{
if(OrderSelect ( ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0);
}
}
if (Ask {
SL = NormalizeDouble(Ask - StopLose * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Megic, 0, Blue);
if (ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0);
}
}
else
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if(Ask {
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Megic, 0, Blue);
if (ticket > 0)
ModifyOrders(OP_BUY);
}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if(Bid {
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble (lastlot * Multiplier, 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Megic, 0, Red);
if (ticket > 0)
ModifyOrders(OP_SELL);
}
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell()
{
int Count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic)
{
if (OrderType() == OP_SELL)
Count ++;
}
}
return(Count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int Count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol()&& OrderMagicNumber() == Megic)
{
if (OrderType() == OP_BUY)
Count++;
}
}
return(Count);
}
//+------------------------------------------------------------------+
//+-----------------------------------------------------------------
void ModifyOrders(int otype)
{
double avgprice = 0,
order_lots = 0;
price = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice -TakeProfit*Point, Digits);
for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
OrderModify(OrderTicket(),OrderOpenPrice(), 0, TP, 0, Red);
}
}
return(avgprice);
}
//+------------------------------------------------------------------+
double FindLastPrice(int otype)
{
double oldopenprice;
int oldticket;
ticket = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}
}
}
}
return(oldopenprice);
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots;
int oldticket;
ticket = 0;
for(int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Megic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+
int FindLastOrderType()
{
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic)
return(OrderType());
}
}
return(-1);
}
//+------------------------------------------------------------------+
int CountTrades()
{
int count = 0;
for (int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Megic)
count++;
}
}
return(count);
}
надо немного добавить примеров , например пример на пересечении скользящих средних, пример для стрелочных индикаторов, и потом как их совместить и создать условие для входа от нескольких индикаторов, то есть сделать, что-то наподобие шаблонов, чтобы в них потом можно было бы вписывать только параметры индикаторов.
Присоединяюсь. На каком-то сайте даже встречал подобную идею создания некоего "конструктора", но она, похоже, на нашла развития.
Было бы удобно иметь "кирпичики" из разных функций, чтобы из них можно было "собирать" советник.
andrei22
И еще неплохо было бы спрятать код под спойлер. ;)
А то неудобно читать и цитировать.
andrei22
И еще неплохо было бы спрятать код под спойлер. ;)
А то неудобно читать и цитировать.
а как его спрятать , где инструкция лежит?
Инструкция там: /forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421
Ошибка в условии:
if(Bid Подскажите, возможно ли использовать внешние скрипты в советнике через Include или как либо еще, чтоб постоянно код не писать скинул ссылку на действие и все?
Изменено 25 сентября, 2013 пользователем Semarql
Ошибка в условии:
Большое спасибо!!!
Добавлено: 27-09-2013 16:59:48
denis77515
Здравствуйте. Вы вчера помогли мне найти ошибку в моем коде и все заработало спасибо. Кстате получился очень крутой робот (круче чем "Авто профит" и " Илан") за 3 дня на тестере эти роботы заработали примерно по 30$ со 100 $ c лотом в 0,01, а мой робот смог приодалеть рубеж в 202 $ но для полного успеха не хватает одной детали. Может сможете помочь мне немного изменить код? Там надо сделать чтобы он открывал позиции не по индикатору ТМА , а после каждого закрытого бара, то-есть если ордер закрывается по тейк профиту , то после закрытия бара открывается следуюсщий ну подробности позже. Так как?
Изменено 27 сентября, 2013 пользователем andrei22
andrei22
Инструкция там: /forum-trade-like-a-pro/14/bolshoe-faq-po-forumu/2421
Ошибка в условии:if(Bid
А что не так, ни как не пойму( если не трудно укажите.
Добавлено: 28-09-2013 01:26:39
if(Bid >=price + Step * Point)
Так чтоли?
Добавлено: 28-09-2013 01:32:52
Вот в упор не пойму, как сделать закрытие по обратному изменению цвета индикатора.
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(CountTrades() == 0)
{
GetSignal();
if (Signal > 0 )
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, " ", Magic, 0, Blue);
if(ticket > 0)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
if (Signal {
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, " ", Magic, 0, Red);
if(ticket > 0)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}
}
}
if(CountTrades() > 0 && CountTrades() {
int order_type = FindLastOrderType();
if(order_type == OP_BUY)
{
price = FindLastPrice(OP_BUY);
if(Ask {
lastlot = FindLastLots(OP_BUY);
if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic,0, Blue);
if(ticket > 0)
ModifyOrders(OP_BUY);
}
}
if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL);
if(Bid >= price + Step * Point)
{
lastlot = FindLastLots(OP_SELL);
if (lastlot lastlot = NormalizeDouble(lastlot * Multipler, 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic,0, Red);
}
if(ticket > 0)
ModifyOrders(OP_SELL);
}
}
/* if(TotalLoss() {
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);
if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}
}
}
} */
return(0);
}
//+------------------------------------------------------------------+
void GetSignal()
{
Signal = 0;
// - 1 - == Получение показаний индикатора ==============================================
double main1 = iCustom(NULL, 0, "Trend", 0, 1);
double main2 = iCustom(NULL, 0, "Trend", 0, 2);
double sign1 = iCustom(NULL, 0, "Trend", 1, 1);
double sign2 = iCustom(NULL, 0, "Trend", 1, 2);
// - 1 - == Окончание блока =============================================================
// - 2 - == Генерация сигнала покупки ===================================================
if (main1 != EMPTY_VALUE && main2 != EMPTY_VALUE// Линия сменила цвет с красного на..
&& sign1 == EMPTY_VALUE && sign2 != EMPTY_VALUE)// ..голубой
Signal = 1;
// - 2 - == Окончание блока =============================================================
// - 3 - == Генерация сигнала продажи ===================================================
if (sign1 != EMPTY_VALUE && sign2 != EMPTY_VALUE// Линия сменила цвет с голубого на..
&& main1 == EMPTY_VALUE && main2 != EMPTY_VALUE)// .. красный
Signal = -1;
// - 3 - == Окончание блока =============================================================
}
ставлю эту строчку
if (Signal {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);
}}}
начинает плодить сделки и и закрывать
Изменено 28 сентября, 2013 пользователем ss1975
Ошибку я уже исправил, все работает! Только хотелось бы изменить условия для входа , чтобы сделка открывалась после каждого бара, то есть пока сделка на SELL находится в просадке и траллится мартином , то сделки на BUY компенсируют убытки от просадки.
уважаемые форумчане. написал эксперт на основе внешнего индикатора... на валютных парах работает, а на золоте или нефти выдает OrderSend error 131 ... в чем может быть причина ???
Уважаемый Vorchunozavr спасибо за код,еще такое дело. Как дополнить бота что бы при достижении первого тейк профита ордер переводился в без убыток,а дальше тралился как есть ? Поможете буду очень признателен !!! Прилагаю код.
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем