Спасибо, будем ждать.
Слава, нет не подойдет.Там совсем другая логика.Поищи, ради интереса, в поисковике: стратегия Т101, или подобный запрос.В общем тема интересная.
//+----------------------------------------------------------------------------+
//| test_DeleteOppositeOrders.mq4 |
//| |
//| Ким Игорь В. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 16.06.2008 Скрипт для тестирования функции DeleteOppositeOrders(). |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link "http://www.kimiv.ru"
#property show_confirm
//------- Глобальные переменные скрипта ---------------------------------------+
color clDelete = Yellow; // Цвет значка удаление ордера
int NumberOfTry = 3; // Количество торговых попыток
bool UseSound = True; // Использовать звуковой сигнал
string NameFileSound = "expert.wav"; // Наименование звукового файла
//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh> // Стандартная библиотека
void start() {
DeleteOppositeOrders();
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 28.11.2006 |
//| Описание : Удаление ордеров |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любой ордер) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
bool fd;
int err, i, it, k=OrdersTotal(), ot;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
ot=OrderType();
if (ot>1 && ot<6) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
if (mn<0 || OrderMagicNumber()==mn) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
fd=OrderDelete(OrderTicket(), clDelete);
if (fd) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
Sleep(1000*5);
}
}
}
}
}
}
}
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 06.03.2008 |
//| Описание : Возвращает флаг существования позиций |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//| ot - время открытия ( 0 - любое время открытия) |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sy || sy=="") {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (ot<=OrderOpenTime()) return(True);
}
}
}
}
}
}
return(False);
}
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 01.09.2005 |
//| Описание : Возвращает наименование торговой операции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| op - идентификатор торговой операции |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("BuyLimit");
case OP_SELLLIMIT: return("SellLimit");
case OP_BUYSTOP : return("BuyStop");
case OP_SELLSTOP : return("SellStop");
default : return("Unknown Operation");
}
}
//+----------------------------------------------------------------------------+
if(OneCandleDeal() && CountTrades()<1 && TimeCurrent()>iTime(NULL,0,0)+Minut*60)
//+----------------------------------------------------------------------------+
//| Возвращает торговый сигнал: |
//| 2 - закрывай продажу |
//| 1 - покупай |
//| 0 - сиди, кури бамбук |
//| -1 - продавай |
//| -2 - закрывай покупку |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sym="", int tf=0) {
int bs=0;
if (sym=="") sym=Symbol();
// Блок анализа с присвоением значения переменной bs
return(bs);
}
<code>case 131: st="Неправильный объём, ошибка в грануляции объёма."; if (po) st=StringConcatenate(st, "\n", "Необходимо прекратить все попытки", " торговых операций и изменить логику программы."); break;</code>
<code>extern int max_Spread=20;</code>
<code> void start() { int spr=MarketInfo(Symbol(), MODE_SPREAD); if(spr > max_Spread) return(0);//выходим </code>
//+------------------------------------------------------------------+
//| AverageRange.mq4 |
//| Ким Игорь В. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 14.09.2005 Скрипт для расчёта: |
//| средней волатильности инструмента High-Low |
//| среднего размера тела свечи ABS(Open-Close) |
//| среднего размера тени свечи |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link "http://www.kimiv.ru"
//#property indicator_chart_window //А ТАК БУДЕТ ИНДИКАТОР
#property show_inputs
extern datetime BeginDateCalc = D'2020.01.01';
extern datetime EndDateCalc = D'2030.12.30';
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
void start()
{
int i, b=0, bb=0, eb, h=0, l=0, s=0, t=0;
string comm="";
for (i=Bars; i>0; i--)
{
if (Time[i]>=BeginDateCalc && Time[i]<=EndDateCalc)
{
if (bb==0) bb=i;
s+=(High[i]-Low[i])/Point;
t+=MathAbs(Open[i]-Close[i])/Point;
if (Open[i]>Close[i])
{
h+=(High[i]-Open[i])/Point;
l+=(Close[i]-Low[i])/Point;
} else {
h+=(High[i]-Close[i])/Point;
l+=(Open[i]-Low[i])/Point;
}
b++;
}
}
comm = "Начало: " + TimeToStr(Time[bb], TIME_DATE|TIME_MINUTES) + "\n";
comm = comm + "Конец: " + TimeToStr(Time[bb-b+1], TIME_DATE|TIME_MINUTES) + "\n";
comm = comm + "Средняя волатильность: " + s/b + " п.\n";
comm = comm + "Средний размер тела: " + t/b + " п.\n";
comm = comm + "Средний размер верхней тени: " + h/b + " п.\n";
comm = comm + "Средний размер нижней тени: " + l/b + " п.";
Comment(comm);
}
//+------------------------------------------------------------------+
Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
Website: http://purebeam.biz
E-mail : purebeam@gmail.com
Но в советнике не реализовано:
5.Закрытие позиций:
— или за Х минут (вынести в настройки) до окончания текущего бара.
Прошу доработать.
ssg