Итак поехали.
Функция отвечает за рандом. Берем псевдослучайный инт, если он нечетный, то орел, если четный, то решка.
void Randomize()
{
int k;
double s;
MathSrand(1);
k=MathRand();
s=MathMod(k,2);
if (s==1) orel=true;
else orel=false;
}
Следующая функция, смотри камменты в коде.
void Analize()
{
if(OrderSelect(number,SELECT_BY_TICKET)==true)
{
if ( OrderCloseTime() > 0 ) //если последний ордер закрыт, то...
{
order_opened=false; //разрешаем открыть новую позицию
if (AccountBalance()>balance) //если МЫ закрылись в +
{
lots=lots*2; //увеличиваем размер контракта в 2 раза
market_limit=market_limit-(AccountBalance()-balance+MarketInfo(Symbol(), MODE_SPREAD)*Point); //считаем сколько денег осталось у рынка
balance=AccountBalance();
}
if (AccountBalance()<balance) //если мы закрылись в -
{
lots=min_lots; // делаем лот минимальным
market_limit=market_limit+(balance-AccountBalance()); //считаем сколько денег осталось у рынка
balance=AccountBalance();
}
}
}
if (MarketInfo(Symbol(), MODE_MARGINREQUIRED)*min_lots/plecho > market_limit) //если рынок не может открыть позицию с минимальным лотом,то
{
allow_trade=false; //останавливаем торговлю
}
}
Тоже расставил камменты
void OpenOrder()
{
double res;
if(!orel && !order_opened) //если решка и предыдущий ордер закрыт
{
res=OrderSend(Symbol(),OP_SELL,lots,Bid,3,Bid+(SL*Point),Bid-(TP*Point),"sell",Magic,0,Red); // продаем
order_opened=true; // и нельзя открывать ордера пока не закроется текущий
number++; // номер ордера
}
if(orel && !order_opened) //если решка и предыдущий ордер закрыт
{
res=OrderSend(Symbol(),OP_BUY,lots,Ask,3,Ask-(SL*Point),Ask+(TP*Point),"buy",Magic,0,Blue); //покупаем
order_opened=true;
number++;
}
}
если в чем-то ошибся-поправляйте
Z303830452951 - если не жалко кидать сюда =)