Скрипт, который позволяет совершать сделки вручную.
Порядок работы такой:
1. Прикрепите скрипт к окну графика;
2. Далее нажимаете клавишу "b" - это покупка, "s" - продажа,
"c" - закрытие.
#property copyright "Viatcheslav Suvorov"
#property show_inputs
#include <WinUser32.mqh>
#define MAGICEXP 00000001
#include <stdlib.mqh>
#import "IdleLib.dll"
int GetLastKeyWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();
#import
extern double Lots = 0.1;
int nGetLastError;
int start()
{
IdleLibInit();
bool NeedLoop = true;
while(NeedLoop)
{
int lastkey = GetLastKeyWP();
string lastwnd = GetActiveWndName();
int pos = Check_for_open_pos();
if((lastwnd != "") && (lastkey == 66) && pos != 1)
{
buy_open(0, 0);
}
if((lastwnd != "") && (lastkey == 83) && pos != -1)
{
sell_open(0, 0);
}
if((lastwnd != "") && (lastkey == 67) )
{
close_order(0, 0);
}
Sleep(100);
}
return(0);
}
void deinit()
{
IdleLibUnInit();
}
void buy_open(double TP, double SL)
{
int ticket, ExtShotsCounter, lasterror;
RefreshRates();
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 5,
SL, TP, 0, MAGICEXP, 0, Magenta);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("BUY order opened : ", OrderOpenPrice());
}
else
Print("Error opening BUY order : ",
ErrorDescription(GetLastError()));
return;
}
void sell_open(double TP, double SL)
{
int ticket, ExtShotsCounter, lasterror;
RefreshRates();
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 5,
SL, TP, 0, MAGICEXP, 0, Red);
if(ticket > 0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("Sell order opened : ", OrderOpenPrice());
}
else
Print("Error opening Sell order : ",
ErrorDescription(GetLastError()));
return;
}
void close_order(int k = 0, int n = 0)
{
int nOrdersTotal = OrdersTotal();
for(int i = nOrdersTotal - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
nGetLastError = GetLastError();
if(nGetLastError != 0)
{
Print("Error selecting order : ",
ErrorDescription(nGetLastError));
continue;
}
if(OrderMagicNumber() != MAGICEXP || OrderSymbol() != Symbol())
continue;
if(OrderType() == OP_BUY && (n == 1 || n == 0))
{
if(OrderProfit() > 0 && k == 1 )
{
RefreshRates();
OrderClose(OrderTicket(), OrderLots(), Bid, 3, Aqua);
}
if(k == 0)
{
RefreshRates();
OrderClose(OrderTicket(), OrderLots(), Bid, 3, Aqua);
nGetLastError = GetLastError();
if(nGetLastError != 0)
Print("Error closing BUY order : ",
ErrorDescription(nGetLastError));
}
}
if(OrderType() == OP_SELL && (n == -1 || n == 0))
{
if(OrderProfit() > 0 && k == 1)
{
RefreshRates();
OrderClose(OrderTicket(), OrderLots(), Ask, 3, Yellow);
}
if(k == 0)
{
RefreshRates();
OrderClose(OrderTicket(), OrderLots(), Ask, 3, Yellow);
nGetLastError = GetLastError();
if(nGetLastError != 0)
Print("Error closing SELL order : ",
ErrorDescription(nGetLastError));
}
}
}
}
int Check_for_open_pos()
{
int ticket, cnt, pos;
if(OrdersTotal() > 0)
{
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
nGetLastError = GetLastError();
if(nGetLastError != 0)
{
Print("Error selecting order : ",
ErrorDescription(nGetLastError));
continue;
}
if(OrderMagicNumber() != MAGICEXP ||
OrderSymbol() != Symbol())
continue;
if(OrderType() == OP_SELL )
pos = -1;
if(OrderType() == OP_BUY )
pos = 1;
}
}
return(pos);
}