Техническое задание
Необходимо доработать помощника для торговли. Имею мало опыта в программировании - понимаю язык, но придумать самому трудно.
Основная архитектура и логика уже была сделана с предыдущим разработчиком. Потом он куда-то пропал) Осталась часть по поводу открытия позиций и прогонка, оптимизация по мелочи.
Мне очень важно лично сесть с исполнителем и вместе писать этого помощника (работает как советник), чтобы самому понимать все операции, которые он совершает.
Алгоритм следующий:
Пользователь выбирает тренд (bool) - вверх или вниз, вызывая советника на каждом отдельном инструменте.
Рабочий ТаймФрейм=Н1
Пользователь также вводит параметр N (Если советник будет искать Максимум, то это Количество свечей слева и справа одновременно, которые НИЖЕ этой точки, если Минимум, то соответственно, свечей, которые ВЫШЕ)
extern int N=5; // Точка Демарка
extern bool TrendUp=False;
string Currency; // Инструмент
int init()
{ N=MathMax(N,2); N=MathMin(N,5); // Контроль входных параметров
Currency=Symbol();
return(0); }
int start()
{ if (Period()!=PERIOD_H1) { Alert("Не тот ТФ"); return(1); }
double UP, DW, SPS, Depo=AccountBalance(), Lots;
bool Bar=False;
int iMax=300, j=1, Round=Digits%2*9+1, SP=3*Round, K=300;
while (j<iMax && !UP && !DW)
{ if (TrendUp==False && !UP && ArrayMaximum(High,2*N+1,j)==N+j) UP=High[N+j];
if (TrendUp==True && !DW && ArrayMinimum( Low,2*N+1,j)==N+j) DW= Low[N+j];
j++; }
for (int i=1; i<=20; i++) SPS+=High[i]-Low[i];
SPS/=20;
Lots=NormalizeDouble(Depo/SPS*Point/K/10,2);
Lots=MathMax(Lots,MarketInfo(Currency,MODE_MINLOT)); Lots=MathMin(Lots,MarketInfo(Currency,MODE_MAXLOT));
if (TrendUp==False) UP-=SPS; if (TrendUp==True) DW+=SPS;
if ((TrendUp==True && Bid<UP) || (TrendUp==False && Bid>DW))
{ if (MathAbs(Close[1]-Open[1])<=30*Point) Bar=True;
if (Bar==False)
{ if ((Close[1]-Open [1]>30*Point && Open[1]- Low [1]>1.62*(Close[1]- Open[1])) || // Белый молот, тень вниз. Тень больше тела более, чем в 1,62 раза
( Open[1]-Close[1]>30*Point && Close[1]- Low [1]>1.62*( Open[1]-Close[1])) || // Черный молот, тень вниз
(Close[1]-Open [1]>30*Point && High[1]-Close[1]>1.62*(Close[1]- Open[1])) || // Белый молот, тень вверх
( Open[1]-Close[1]>30*Point && High[1]-Open [1]>1.62*( Open[1]-Close[1]))) Bar=True; }} // Черный молот, тень вверх
if (Volume[0]==1 && Bar==True) // Открытие нового бара
{ if (TrendUp==True) for (i=1; i<=10; i++) OrderSend(Currency,OP_BUY, Lots,Ask,SP,0,0);
if (TrendUp==False) for (i=1; i<=10; i++) OrderSend(Currency,OP_SELL,Lots,Bid,SP,0,0); }
Comment(Currency," / ",UP," / ",DW," / ",SPS/Point," / ",Lots);
Далее, скрипт ищет разворотные свечи (описаны выше) и как только они появляются, входит в сторону тренда, указанную пользователем вначале.
Нужно вместе сесть и дописать алгоритм открытия позиций. С риск-менеджментом еще предстоит работа по оптимизации.
Работы на пару-тройку дней вместе посидеть несколько часов.
С меня кофе во время посиделок)