Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#1026


Здраствуйте ребята,вопросик таков. Можно сделать функцию что бы она открывала ордера по мартину в мультивалютном советнике ?
... например открыты 7 ордеров по разным валютным парам и в разных направлениях,мне нужно что бы при соответствующим условии то есть от показания индикатора он открывал точно такие же ордера по тем же парам в том же направлении но с увеличенным лотом.

Индикатор даёт сигнал по конкретной паре или вообще (типа: обед! - пора усредняться!)?
В функции перебора ордеров вставьте функцию открытия, т.е. находите открытый ордер берете его тип, лот и отправляете на усреднение, потом следующий и т.д.
Сортировать только по магику. Если не получается давайте код - будем разбирать.
#1027



открытый ордер остается единственным пока не сработает стоплосс или тп, только потом со следующей свечи открывается следующий ордер в зависимости от МА. и так далее
походу я начинаю догонять с открыванием ордеров, но тормозит меня открытия ордера после сработывания стоплосса????????

Узнать о Лосе просто:
- после успешного открытия ордера запоминаем oldBalans=AccountBalans();
- если количество ордеров = 0, смотрим if (oldBalans>AccountBalans()) - значит Лось.
Также советую идти простыми путями, например: после открытия очередного ордера запоминать его лот, прайс и всё, что Вам нужно, а не при каждом тике искать последний.

А если другие ордера на других например парах закроются? Баланс может стать меньше, хотя рассматриваемый ордер закроется по профиту.
Предлагаю запоминать стоплосс ордера, а после его закрытия сравнивать с ценой закрытия (с поправкой на проскальзывание).
#1028

подскажите пожалуйста что -то я в тупик зашел с этими ЛОСЯМИ, не открывает ордера по удвоенному лоту после стоплосса????????!!!!!!!!!

Изменено 23 июня, 2014 пользователем stepa31101

#1029


подскажите пожалуйста что -то я в тупик зашел с этими ЛОСЯМИ, не открывает ордера по удвоенному лоту после стоплосса????????!!!!!!!!!

1. Не вставляйте ваш код в пост! Нужно уважать других участников, кому это не интересно. Либо прикрепляйте файл, либо прячьте под спойлер.
2. Я Вам советовал написать алгоритм. - в коде логическая каша!
- зачем рассчитывать лот на каждом тике?
- oldOrderStopLoss = OrderStopLoss(); - это уровень (цена), а PRICE_CLOSE = 0 (это ценовая константа читать: здесь
т.е. в блок открытия ордера после Лося входа нет!
3. Похоже Вам надо написать алгоритм.
- 1. Если не новый бар - выходим.
- 2. Проверяем наличие открытого ордера.
- если есть - выходим.
- 3. Проверяем профит у последнего закрытого ордера (по тикету: OrderSelect(Ticket, SELECT_BY_TICKET, MODE_HISTORY))
- если (+) - Проверяем условие на вход, старт лот, определяем направление, входим
- если (-) - Увеличиваем лот, определяем направление, входим
- 4. Запоминаем последний тикет (тип, лот - по вкусу).
ВСЁ! - это будет работать. Перепишите заново (совет).
#1030

спасибо огромное

Добавлено: 23-06-2014 18:23:47

ничего не получается, кто сможет дописать советник за оплату????????????

Изменено 23 июня, 2014 пользователем stepa31101

#1031

кто может подсказать что я не так делаю нужно тралить все ордера одного направления
вот код:
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
void Trailing()
{
double avg = 0,
_lots = 0,
price_ = 0;
for (int i = OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
price_ += OrderOpenPrice() * OrderLots();
_lots += OrderLots();
}
}
}
avg = NormalizeDouble(price_ / _lots, Digits);

if (OrderType() == OP_BUY)
{
if (Bid - NormalizeDouble(avg, Digits) > tralstop)
{
if (Bid - OrderOpenPrice() > tralstop * Point + tralstep * Point)
{
if (OrderStopLoss() {
SL = NormalizeDouble(Bid - tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return;

}
}
}
}

if (OrderType() == OP_SELL)
{
if (NormalizeDouble(avg, Digits) - Ask > tralstop)
{
if (OrderOpenPrice() - Ask > tralstop * Point + tralstep * Point)
{
if (OrderStopLoss() > Ask + tralstop * Point)
{
SL = NormalizeDouble(Ask + tralstop * Point, Digits);
if (OrderStopLoss() != SL)
if (OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0))
return;

}
}
}
}





}

#1032


ничего не получается, кто сможет дописать советник за оплату???????

Вы считаете, что вложения отобьются? Пишите в личку. (здесь оффтоп)


кто может подсказать что я не так делаю нужно тралить все ордера одного направления

Да практически всё не так... У Вас нет алгоритма (плана).
- Вы в цикле рассчитываете параметры для вычисления уровня безубытка сетки ордеров.
- Потом вычисляете уровень безубытка: avg = NormalizeDouble(price_ / _lots, Digits);
- После пересчёта ордеров выбранным остаётся последний ордер и Вы его тралите.
Что не так? Если хотите тралить все ордера сетки по общему (одинаковому) СЛ, то надо опять цикл делать и ещё до цикла определяться с направлением (типом ордеров)
#1033

понятно спасибо


Добавлено: 24-06-2014 14:44:19

по пробовал так не идет
код:
void Trailing( int otype)
{
double avgprice = 0,
order_lots = 0;
price = 0;

for (int i = 0; i {
if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) SL = NormalizeDouble(avgprice - tralstop * Point, Digits);
if (otype == OP_SELL) SL = NormalizeDouble(avgprice + tralstop * Point, Digits);

for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0));


}
}




}

Изменено 24 июня, 2014 пользователем 35aleks

#1034


по пробовал так не идет
код:

Спойлер


void Trailing( int otype)
{
double avgprice = 0,
order_lots = 0;
price = 0;

for (int i = 0; i {
if ( OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);
if (otype == OP_BUY) SL = NormalizeDouble(avgprice - tralstop * Point, Digits);
if (otype == OP_SELL) SL = NormalizeDouble(avgprice + tralstop * Point, Digits);

for (i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
if(OrderModify(OrderTicket(), OrderOpenPrice(), SL, 0, 0));


}
}




}



Делайте код под спойлером - как я сейчас сделал. (читайте правила форума)
У Вас логическая ошибка: Вы вычисляете не динамический, а статический СЛ! - ведь уровень БУ не меняется.
В предыдущем варианте было нормально, только надо было цикл по ордерам добавить после вычисления уровня БУ.
#1035

0ll Спасибо за участие,сейчас не много не когда.Через пару дней свободней будет.Потом и обсудим.

#1036

Здравствуйте! У меня опять беда. Вот в 3-м уроке Сергей вводит две переменные: double PriceHigs, PriceLow, SL, TP;
Но у него-то мувинги. А у меня гистограмма. Надо чтобы при смене цвета открывались ордера. Что мне писать double..............? Подскажите пожалуйста. :((


Добавлено: 25-06-2014 17:58:34

А вообще, может есть советник на такой идикатор? Надо чтоб как только поменялся цвет-сразу открылся ордер. При достижении N пунктов закрылся 0.5 ордера, потом N2 пунктов-закрылась вторая половина. При смене цвета всё закрылось и открылся ордер в другую сторону. Для кого-то это легко, а я с моим даром программирования буду ещё лет 30 изобретать велосипед. Мож в готовый советник подставить получиться. Помогите кто чем может.

Изменено 25 июня, 2014 пользователем Aleksey983

#1037


Сергей вводит две переменные: double PriceHigs, PriceLow, SL, TP;

- 4 ????

Надо чтобы при смене цвета открывались ордера. Что мне писать double..............?

В индюке разный цвет линий в разных буферах.
Ответа Сергея можно ждать долго... А я не смотрел его уроки (и не буду - времени нет) Поэтому на догадках: в double ничего писать не надо. Ищите вызов индикатора (iMA) и там вставляйте свой (как вставить ищите в справке или код прикрепите)
#1038

Здравствуйте! Спасибо,что откликнулись. Код я уже писал в ответ #916. Надо ввести переменные: double ???, ???, TP,SL. В int start()
{
??????? = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);
В индюке разный цвет линий в разных буферах.
Ответа Сергея можно ждать долго... А я не смотрел его уроки (и не буду - времени нет) Поэтому на догадках: в double ничего писать не надо. Ищите вызов индикатора (iMA) и там вставляйте свой (как вставить ищите в справке или код прикрепите)

#1039


Надо ввести переменные: double ???, ???, TP,SL. В int start()
{
??????? = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);

Понятно теперь.
В double пишите что хотите, например: "мой_индюк_буф0".
В вызове индюка iCustom предпоследняя цифра - номер буфера (выделил).
Вообще надо-бы знать следующее:
1. бывают индюки которые не рассчитывают 0-бар и следовательно его читать бесполезно (последняя цифра в вызове iCustom).
2. надо знать номера буферов, которые Вам нужны.
Отследить изменение цвета легко: в буферах не может быть одновременно на одном баре записано непустое значение - т.е. либо буф0 != EMPTY_VALUE, либо буф1. (если индюк написан правильно)
#1040

Большое спасибо 0ll !!! Наконец-то написал начало. @-) Всё по видео. И с Вашей помощью разумеется. Там в видео ещё в старом билде всё описано. Чуть поправил,в меру своей безграмотности. Скомпилировал-0 ошибок! Вот что получилось:

extern double Lots = 0.1;
extern int TakeProfit = 10;
extern int StopLoss = 20;
extern int Slippage = 5;
extern string comment = "ROBOT 1";
extern int Magic = 1983;

string gs_unused_76 = "TheSecretTR~";
extern int ADX_period = 20;
extern int MOM_period = 20;
extern int MACD_fast_ema = 5;
extern int MACD_slow_ema = 15;
extern int MACD_signal_period = 9;
extern int MaxBarsOnGraph = 500;
double g_ibuf_108[];
double g_ibuf_112[];
double gda_116[];
double gda_120[];
double gda_124[];
double gda_128[];
double gda_132[];
double gda_136[];
double g_iadx_140;
double g_iadx_148;
double g_iadx_156;
double g_imomentum_164;
double g_imacd_172;
int g_bars_180;
int gi_184;
int gi_188;
int gi_196;
int gi_200;
int gi_204;
int gi_208;
int g_datetime_228;
int g_datetime_232;
int g_datetime_236;
int gi_unused_240;
int gi_244 = 0;
int gi_248;
int gi_256;
int gi_unused_260 = -1;
string gs_dummy_264;
string gs_272 = "TheSecret Trend Reversal";
string gs_dummy_280;

double мой_индюк_буф0, мой_индюк_буф1, SL, TP;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}

return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| Expert start function |
//+------------------------------------------------------------------+
int start()
{
мой_индюк_буф0 = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 0, 0);

мой_индюк_буф1 = iCustom(Symbol(), 0, "TheSecret Trend Reversal", ADX_period, MOM_period , MACD_fast_ema, MACD_slow_ema, MACD_signal_period, MaxBarsOnGraph, 1, 0);

if (Ask == мой_индюк_буф0 && CountBuy() == 0)
{
SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);

ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, comment, Magic, 0, Blue);
if (ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
bool modify1=OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}

if (Bid == мой_индюк_буф1 && CountSell() == 0 )
{
SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, comment, Magic, 0, Red);
if (ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
bool modify2=OrderModify(ticket, OrderOpenPrice(), SL, TP, 0);
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
bool select2=OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
count++;
}
}

return(count);
}

//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
for(int trade = OrdersTotal()-1; trade >= 0; trade--)
{
bool select1=OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
count++;
}
}

return(count);
}

Проверил в тесторе- СТОЛЬКО ОШИБОК :( !!!!
ВОТ ЧТО ОПЯТЬ НЕ ТАК??????? МОЖЕТ Я ДЭБИЛ :-s ?

#1041


Проверил в тесторе- СТОЛЬКО ОШИБОК :( !!!!
ВОТ ЧТО ОПЯТЬ НЕ ТАК???????

Так напишите какие ошибки (я не хочу грузить Вашу сову в терминал).
Вот это мне не нравиться: Ask == мой_индюк_буф0, я бы использовал .

МОЖЕТ Я ДЭБИЛ :-s ?

Вы чего? - хотите чтоб я Вас убеждал в обратном? Здесь не занимаются психотерапией - оффтоп.
#1042

ВОТ ЧТО ПИШЕТ:
23:42:29 TestGenerator: spread set to 4
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
=========ТАКИХ СТРОЧЕК ШТУК 30===============
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 84 at 2014.06.03 00:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.18000 at 2014.06.03 00:00 is not reached from the least timeframe, low price 139.19000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:00 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:01 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:02 and price 139.26000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:03 and price 139.25000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:04 and price 139.25000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.23000 at 2014.06.03 01:05 and price 139.24000 mismatched)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
====ТАКИХ СТРОЧЕК ШТУК 50========================
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 163 at 2014.06.03 01:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.17000 at 2014.06.03 01:00 is not reached from the least timeframe, low price 139.21000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:01 and price 139.30000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:02 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 02:03 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (volume limit 156 at 2014.06.03 02:00 exceeded)
23:42:37 TestGenerator: unmatched data error (low value 139.20000 at 2014.06.03 02:00 is not reached from the least timeframe, low price 139.27000 mismatches)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:01 and price 139.29000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:02 and price 139.31000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:03 and price 139.30000 mismatched)
23:42:37 TestGenerator: unmatched data error (high value 139.28000 at 2014.06.03 03:04 and price 139.33000 mismatched)
23:42:37 TestGenerator: 13907 generating errors, logged 100 first error records
23:42:37 МОЁ ПЕРВОЕ ТВОРЕНИЕ!!!!! inputs: Lots=0.1; TakeProfit=10; StopLoss=20; Slippage=5; Magic=1983; ADX_period=20; MOM_period=20; MACD_fast_ema=5; MACD_slow_ema=15; MACD_signal_period=9; MaxBarsOnGraph=500;
23:42:37 2014.06.03 00:00 Custom indicator TheSecret Trend Reversal EURJPY,H1: loaded successfully
23:42:42 EURJPY,H1: 113199 tick events (1409 bars, 114199 bar states) processed within 5460 ms (total time 12839 ms)

#1043


ВОТ ЧТО ПИШЕТ:
TestGenerator: unmatched data error
...
TestGenerator: 13907 generating errors, logged 100 first error records

У Вас с котировками хреново, а то, что не умеете пользоваться Гуглом - это ещё хуже.
Про сову написано, что она успешно загрузилась и всё. (выше писал что мне не нравиться в коде - может из-за этого сделок нет)
#1044

Здраствуйте 0ll. Вот скрипт какой я хотел с вами обсудить. Задумка была такова в рынке находятся 7 ордеров по разным валютным парам,и открыты в разных направлениях.4 на пакупку, 3 на продажу.Так вот я хочу сделать функцию в виде скрипта для пробы, а потом что бы в будущем можно было ее интегрировать в советник. Мне нужно что бы скрипт определял валютную пару,то есть по какой валютной паре открыт ордер и брал с него лот.увеличивал его и открывал ордер в том же направлении и по той же валютной паре ? Буду признателен если научите как это сделать !

Мартин_USD_+70._v1.0.mq410 скач.

Изменено 27 июня, 2014 пользователем denis77515

#1045


Мне нужно что бы скрипт определял валютную пару,то есть по какой валютной паре открыт ордер и брал с него лот.увеличивал его и открывал ордер в том же направлении и по той же валютной паре

Вопросы по алгоритму:
- Первичные ордера кто открывает? (у них есть магик?)
- В Вашем скрипте есть логические ошибки. Вы из него будете делать?
- Кроме наличия открытого ордера других условий не нужно для усреднения (положение цены относительно ордера)?
#1046

Да я открываю ордера почти таким же скриптом,потому там есть магик. Для открытия ордеров условие показания индикатора. В будущем хочу написать условие что вот такие то показания индикатора.он должен автоматом все перебрать и определить,ну и соответственно открыть ордера.


Добавлено: 27-06-2014 07:49:42

Дружище oll если брать полный алгоритм системы то он вкратце таков.
есть значение индикатора,открываем ордера, индикатор показывает более глубокие значения то увеличиваем лот и опять открываем ордера.в том же алгоритме работает еще раз. то есть открытие ордеров происходит по условию показаний индикатора не более трех колен.по всем парам.

Изменено 27 июня, 2014 пользователем denis77515

#1047
denis77515 Что мне не нравится в Вашем скрипте (по порядку):
- массивы с названиями инструментов - ненужны, т.к. инициирующий ордер открывает другой скрипт.
- множество функций (по сути одинаковых) которые возвращают то символ последнего ордера, то лот, то тип - так нельзя. Это вообще ни к чему - зачем Вам данные последнего ордера? Вы наблюдаете за своим индюком, получили сигнал и запускаете скрипт-усреднитель, которые находит все открытые ордера с нужным магиком и усредняет позиции - ВСЁ. Тем более вдумайтесь: Вы усреднили последний ордер на следующий тик новый ордер станет последним - Вы и его усреднять будете?

Т.е. предлагаю выкинуть это всё и сделать один цикл по нужному магику. Находим ордер, берём лот*мартин, тип, символ и сразу открываем усредняющий. Т.к. количество усреднений - 3, то надо предусмотреть хитрый поиск ордера для усреднения... Например берём Символ первого попавшегося ордера и проверяем - сколько ордеров на символе с сортировкой на максимальный лот. Допустим находим два = значит уже было усреднение и текущий лот = Х*Магик.
После этого новый цикл (да, видимо без массива символов не обойтись) если есть ордер по символу усредняем и символ в фальсе, следующий и т.д.
#1048

Дружище 0ll я примерно так картину мысленно для себя выстроил,а вот как это все реализовать на практике я не знаю. Потому обращаюсь к более опытным программистам. Я открывал тему напишем всем миром советник по ТС Кукловод так вот это все из этой оперы.Дорогой 0ll если вам интересна эта тема,давайте береберемся туда,что бы здесь не захламлять форум нашей перепиской. Я сейчас сижу дописываю советник по одной корзине ордеров. Выложу его там. естественно кроме функций усреднения.что бы более менее былы понятна картина чего я хочу добится от прогрвммы.

/ugolok-programmista/13/predlagayu-vsem-mirom-napisat-sovetnik-po-ts-kuklovod/6421

#1049

Спасибо Oll !!!!! Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим. Т.е. сработал SL или TP, он опять открывает. Вот. Ну хоть вообще начал работать. УРА!!!!!
У Вас с котировками хреново, а то, что не умеете пользоваться Гуглом - это ещё хуже.
Про сову написано, что она успешно загрузилась и всё. (выше писал что мне не нравиться в коде - может из-за этого сделок нет)

#1050


Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим.

Вы ранее писали : "А у меня гистограмма" - это означает, что индюк в подвале (отдельном окне под графиком) значение например = 45
Вдумайтесь: КАК можно сравнивать Ask > 45 ??? Поэтому у Вас всегда Селл потому что Bid Ранее я писал КАК нужно сравнивать. Ведь значением буфера будут либо пусто (Empty_Value), либо некая цифра (например 45), поэтому нужно писать:
if (мой_индюк_буф0 != Empty_Value && ... ) и
if (мой_индюк_буф1 != Empty_Value && ... ). Понятно?

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025