[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 251
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Профи, прошу о помощи! Установил советник на 4 валютах в одном терминале, но открывает сделки только по 1 из валют. В чем может быть причина? Как добиться работы по 4 валютам одновременно?
Я сам недавно разбирался в этом вопросе. Помимо того, что нужно сделать перебор валют в советнике, нужно правильно указать Point, ask, bid, digits. Подкачку исторических данных на каждой валюте, если она используется. Если идут расчеты с предуказанной валютой iBar, iClose, тоже вставить вместо NULL перебор валют. Здесь пример для 25 валютных пар. Может я не великий специалист, но внятного ответа от спецов не добился, пришлось самому разбираться.
да :)
Раз ты так быстро отвечаешь, ответь мне на тупой вопрос - если я допускаю ошибку 1 в коде, то это терминал мне будет ее выбрасывать? На сервер эта информация не идет?
Присоединяюсь к вопросу, только добавлю: "ошибку 130".
Раз ты так быстро отвечаешь, ответь мне на тупой вопрос - если я допускаю ошибку 1 в коде, то это терминал мне будет ее выбрасывать? На сервер эта информация не идет?
Сразу скажу:
- я не sergeev :)
- и я не знаю :)
Но
- это легко узнать опытным путём :)
Раз ты так быстро отвечаешь, ответь мне на тупой вопрос - если я допускаю ошибку 1 в коде, то это терминал мне будет ее выбрасывать? На сервер эта информация не идет?
проверил, не идет. по модификации это ответ терминала.
проверил, не идет. по модификации это ответ терминала.
1.EURUSD или GBPUSD... т.д. - это значит ЯВНО... ticket=OrderSend( EURUSD, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen);
2.sy=Symbol(); ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); - это значит посредством присваивания...
С этой грамотной ф-ей - Функция OpenPosition() для online - разберитесь и вставьте ее в код своего сова и все будет работать...не исключено, что и через присваивание тоже...
у меня проблема с зацикливанием с использованием модификации,
самое интересное функция стандартного трала работает с обоими из этих функций по одиночке тоже нормально работает, а когода использую фрактальную модификацию с безубытком то начинаються безконечные модификации по фракталу и безубытку
за основу брал модификацию https://book.mql4.com/ru/trading/ordermodify
//ф-я модификации ордеров безубыток
int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
//------------------------------------------------------обсчет фрактала
int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
скажите пожалуйста есть ли функция/команда, определяющая комиссию по всем открытым ордерам