Если Вы хотите заказать советник или индикатор, то публикуйте в эту группу тех. задание. Если Ваш заказ не очень сложный, то велика вероятность, что Вам его смогут сделать даже бесплатно
Программистам MQL: подпишитесь на группу, чтобы получать уведомления о заказах.
//--------------------------------------------------------------------
// modifystoploss.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Tral_Stop=100; // Дист. преследования
//--------------------------------------------------------------- 1 --
int start() // Спец. функция start
{
string Symb=Symbol(); // Финанс. инструмент
//--------------------------------------------------------------- 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 выбранного орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
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=Bid-TS*Point; // то модифицируем его
if(SL<OrderOpenPrice())
{
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=Ask+TS*Point; // то модифицируем его
if(SL>OrderOpenPrice())
{
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) // Получилось <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>
{
Alert("Ордер ",Text,Ticket," модифицирован<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '> ");
break; // Из цикла модифи.
}
//--------------------------------------------------- 7 --
int Error=GetLastError(); // Не получилось <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/005.gif' alt=' ( '>
switch(Error) // Преодолимые ошибки
{
case 130:Alert("Неправильные стопы. Пробуем ещё раз.");
RefreshRates(); // Обновим данные
continue; // На след. итерацию
case 136:Alert("Нет цен. Ждём новый тик..");
while(RefreshRates()==false) // До нового тика
Sleep(1); // Задержка в цикле
continue; // На след. итерацию
case 146:Alert("Подсистема торгов занята.Пробуем ещё");
Sleep(500); // Простое решение
RefreshRates(); // Обновим данные
continue; // На след. итерацию
// Критические ошибки
case 2 : Alert("Общая ошибка.");
break; // Выход из switch
case 5 : Alert("Старая версия клиентского терминала.");
break; // Выход из switch
case 64: Alert("Счет заблокирован.");
break; // Выход из switch
case 133:Alert("Торговля запрещена");
break; // Выход из switch
default: Alert("Возникла ошибка ",Error);//Др. ошибки
}
break; // Из цикла модифи.
} // Конец цикла модифи.
//------------------------------------------------------ 8 --
} // Конец анализа орд.
} // Конец перебора орд.
if(IsTesting() && OrdersTotal()<1)
{
int r=0;
//r=OrderSend(Symbol(),OP_SELL,0.1,Bid,50,Bid+500*Point,Bid-1500*Point,"",123,0,Red);
r=OrderSend(Symbol(),OP_BUY,0.1,Ask,50,Ask-500*Point,Ask+1500*Point,"",123,0,Blue);
}
//--------------------------------------------------------------- 9 --
return(0); // Выход из start()
}
//-------------------------------------------------------------- 10 --
Комментарии (2)
35 AM2 Сообщений: 16266 - Андрей
7 PetrovMaxim Автор Сообщений: 119 - Максим
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий