MT5 compreende claramente quando um stop loss é activado e quando um take profit é activado. // Isto pode ser visto a partir de comentários de encomendas e é claro a partir do próprio manuseamento da plataforma.
É por isso que temos o pedido (constantemente). - Gostaríamos que a bandeira apropriada aparecesse na OnTradeTransaction ao activar o SL ou TP.
Mas se isto for impossível (mesmo teoricamente) devido à falta de uma arquitectura vinculativa adequada, é melhor dizer apenas que a arquitectura da plataforma não nos permite colocar uma bandeira na ordem que está a ser enviada para esta acção para confirmar se foi um SL ou um TP.
Embora para si não exista tal palavra como "nada é impossível". São metaquotes :)
struct MqlTradeTransaction
{
ulong deal; // Тикет сделкиulong order; // Тикет ордераstring symbol; // Имя торгового инструментаENUM_TRADE_TRANSACTION_TYPE type; // Тип торговой транзакцииENUM_TRADE_ACTION action, // Тип события, по какой причине выставлен ордер
ENUM_ORDER_TYPE order_type; // Тип ордераENUM_ORDER_STATE order_state; // Состояние ордераENUM_DEAL_TYPE deal_type; // Тип сделкиENUM_ORDER_TYPE_TIME type_time; // Тип ордера по времени действияdatetime time_expiration; // Срок истечения ордераdouble price; // Цена double price_trigger; // Цена срабатывания стоп-лимитного ордераdouble price_sl; // Уровень Stop Lossdouble price_tp; // Уровень Take Profitdouble volume; // Объем в лотах
};
as razões para fazer a encomenda, respectivamente SL desencadeado TP desencadeado Sair de uma posição por Stop Out
e outros, se houver algum // embora isto possa ser tudo o que precisamos
MT5 compreende claramente quando o Stop Loss é activado e quando o Take Profit é activado. // Isto pode ser visto nos comentários da ordem e na própria plataforma.
O problema é esse: ele não compreende e não deve compreender.
Tudo passa por filas de execução, as ordens são divididas em simples BUY/SELL, com gateways para fornecedores de liquidez e bolsas. Não se sabe como será executado (incluindo parcial) na realidade. E se de repente proclamarmos que garantimos o fim das bandeiras, o Papaklass acusar-nos-á amanhã com justa raiva de que "não funcionou para mim!
A questão é essa: na realidade, não o faz e não deve fazê-lo.
Tudo corre em filas de execução, as ordens são divididas em simples BUY/SELL, e através das portas de acesso aos fornecedores de liquidez e bolsas.
Sim, está a dividir-se.
Mas esta acção de divisão requer uma acção bastante específica - para activar o Stop Loss/StackProfit. E estas acções são processadas pelo servidor da MT , não pelo terminal do cliente.
Mesmo que a activação de paragens não ocorra em MT, o resultado continua a ser a criação de uma ordem ou evento real para MT5.
Compreendo que não consigo entrar nas entranhas do servidor MT5, mas é só ter a certeza, mais uma vez. É possível notificar sobre a acção com base na qual a encomenda é feita?
Assim que o servidor (ou gateway) activa um stoploop/stackprofit/stopout, etc., a resposta é fazer uma encomenda de qualquer maneira. // Nada acontece sem uma encomenda!
E aqui, nesta ordem e colocar a bandeira apropriada - a razão para colocar esta ordem ou evento.
Mas a acção para esta divisão é bastante específica - para activar o stoploop/stackprofit. E esta acção é processada pelo servidor MT , não pelo terminal do cliente.
A resposta é simples - não há garantia de 100% de bandeiras.
Porque existem muitas fontes e iniciadores de desencadeamento, e não é o único servidor comercial.
A resposta é simples - não há garantia de 100% de bandeiras.
Pois há tantas fontes e gatilhos, e este não é de modo algum o único servidor comercial.
A activação de um stop loss é realmente tratada por vários servidores comerciais?
Pareceu-me que apenas um servidor comercial é suficiente para este fim.
Para a activação, é criada uma ordem e a plataforma é notificada da sua criação. // por um portão externo depois é derramado. e os ofícios aparecem. É compreensível que a encomenda não possa ser preenchida, e que o resto seja retirado. Mas no momento da criação desta ordem podemos acrescentar à transacção uma bandeira dizendo que se trata de uma ordem de stop loss. O mais importante é o próprio acontecimento que é uma ordem para uma paragem da perda.
Ou em MT pode haver negócios sem ordem se o stop loss for tratado pela porta de entrada?
Mas sabe melhor, não vou discutir. é um ponto muito subtil.
Nós, pela nossa parte, estamos a pensar numa comunicação independente entre agentes sem um terminal. Por exemplo, um dos agentes pode gerar dados iniciais e enviá-los para os outros por fordcast.
Sem o envolvimento do terminal, isto é bom.
Quem irá gerar os dados para este "um dos agentes"? Será um guião ou um indicador capaz de o fazer?
Para que serve a comunicação entre agentes, ilumine os pouco sofisticados se puder.
Já escreveu um guião para testar as capacidades de cálculos matemáticos, mas faltam algumas funções)
// все данные расчетов агентов складываются в массив структурstruct MqlCloud
{
enum STATUS {wait,ready,error,free};
STATUS status; // статус выполнения задачи - выполнена, выполняется, ошибка выполненияdouble input_data[]; // массив входных данныхdouble out_data[]; // массив выходных данных
};
long id=AccountInfoInteger(ACCOUNT_LOGIN);
double in_data[100];
MqlCloud result[10000];
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
CloudInit(id,"myprog.ex5"); // id - это кто будет платить за Cloud, myprog.ex5 - программа которая будет выполнять расчеты
CloudData("file.dat"); // file.dat - файл с неизменными данными для расчетаfor(uint i=0; i<10000; i++)
{
//// формируем массив входных данных для расчетаfor(int n=0; n<ArraySize(in_data); n++) in_data[n]=MathRand()/SHORT_MAX;
//
CloudCalculat(i,in_data); // здесь i - номер задачи, input_data - массив переменных входных данных
}
// выводим максимальный результатdouble max_result=0.0;
for(uint i=0; i<10000; i++)
{
if(result[i].status!=ready)
{
i--;
Sleep(1000);
continue;
}
max_result=MathMax(max_result,result[i].out_data[0]);
}
Print("Max result = ",ArrayMaximum(result[0].out_data));
}
//+------------------------------------------------------------------+void OnCloudPass(uint num_mission)
{
// анализируем результат выполнения задачи по ее номеру, если нужноdouble s=result[num_mission].out_data[0];
}
//+------------------------------------------------------------------+void CloudInit(long ID, string programm_name) {}
void CloudData(string file_dat) {}
void CloudCalculat(uint num_mission, double & idata[]) {}
Eis o que se passa, Renat.
MT5 compreende claramente quando um stop loss é activado e quando um take profit é activado. // Isto pode ser visto a partir de comentários de encomendas e é claro a partir do próprio manuseamento da plataforma.
É por isso que temos o pedido (constantemente). - Gostaríamos que a bandeira apropriada aparecesse na OnTradeTransaction ao activar o SL ou TP.
Mas se isto for impossível (mesmo teoricamente) devido à falta de uma arquitectura vinculativa adequada, é melhor dizer apenas que a arquitectura da plataforma não nos permite colocar uma bandeira na ordem que está a ser enviada para esta acção para confirmar se foi um SL ou um TP.
Embora para si não exista tal palavra como "nada é impossível". São metaquotes :)
Por outras palavras, olhando para a estrutura da transacção https://www.mql5.com/ru/docs/constants/structures/mqltradetransaction
Eu acrescentaria um campo TRADE_ACTION
as razões para fazer a encomenda, respectivamenteSL desencadeado
TP desencadeado
Sair de uma posição por Stop Out
e outros, se houver algum // embora isto possa ser tudo o que precisamos
Há aqui um ponto, Renat.
MT5 compreende claramente quando o Stop Loss é activado e quando o Take Profit é activado. // Isto pode ser visto nos comentários da ordem e na própria plataforma.
O problema é esse: ele não compreende e não deve compreender.
Tudo passa por filas de execução, as ordens são divididas em simples BUY/SELL, com gateways para fornecedores de liquidez e bolsas. Não se sabe como será executado (incluindo parcial) na realidade. E se de repente proclamarmos que garantimos o fim das bandeiras, o Papaklass acusar-nos-á amanhã com justa raiva de que "não funcionou para mim!
A questão é essa: na realidade, não o faz e não deve fazê-lo.
Tudo corre em filas de execução, as ordens são divididas em simples BUY/SELL, e através das portas de acesso aos fornecedores de liquidez e bolsas.
Sim, está a dividir-se.
Mas esta acção de divisão requer uma acção bastante específica - para activar o Stop Loss/StackProfit. E estas acções são processadas pelo servidor da MT , não pelo terminal do cliente.
Mesmo que a activação de paragens não ocorra em MT, o resultado continua a ser a criação de uma ordem ou evento real para MT5.
Compreendo que não consigo entrar nas entranhas do servidor MT5, mas é só ter a certeza, mais uma vez. É possível notificar sobre a acção com base na qual a encomenda é feita?
Assim que o servidor (ou gateway) activa um stoploop/stackprofit/stopout, etc., a resposta é fazer uma encomenda de qualquer maneira. // Nada acontece sem uma encomenda!
E aqui, nesta ordem e colocar a bandeira apropriada - a razão para colocar esta ordem ou evento.
Talvez devesse ter sido introduzida uma nova estrutura, apenas para TradeTransaction?
Não é assim tão novo :) é muito completo.
Faltam apenas dois campos
- identificador de posição
- razão para fazer uma encomenda
Sim, divide-se.
Mas a acção para esta divisão é bastante específica - para activar o stoploop/stackprofit. E esta acção é processada pelo servidor MT , não pelo terminal do cliente.
A resposta é simples - não há garantia de 100% de bandeiras.
Porque existem muitas fontes e iniciadores de desencadeamento, e não é o único servidor comercial.
A resposta é simples - não há garantia de 100% de bandeiras.
Pois há tantas fontes e gatilhos, e este não é de modo algum o único servidor comercial.
A activação de um stop loss é realmente tratada por vários servidores comerciais?
Pareceu-me que apenas um servidor comercial é suficiente para este fim.
Ou em MT pode haver negócios sem ordem se o stop loss for tratado pela porta de entrada?Para a activação, é criada uma ordem e a plataforma é notificada da sua criação. // por um portão externo
depois é derramado. e os ofícios aparecem.
É compreensível que a encomenda não possa ser preenchida, e que o resto seja retirado.
Mas no momento da criação desta ordem podemos acrescentar à transacção uma bandeira dizendo que se trata de uma ordem de stop loss.
O mais importante é o próprio acontecimento que é uma ordem para uma paragem da perda.
Mas sabe melhor, não vou discutir. é um ponto muito subtil.
papaklass:
E quem é que está a falar?
Definitivamente, você.
Para quê?
Comporte-se.
Nós, pela nossa parte, estamos a pensar numa comunicação independente entre agentes sem um terminal. Por exemplo, um dos agentes pode gerar dados iniciais e enviá-los para os outros por fordcast.
Sem o envolvimento do terminal, isto é bom.
Quem irá gerar os dados para este "um dos agentes"? Será um guião ou um indicador capaz de o fazer?
Para que serve a comunicação entre agentes, ilumine os pouco sofisticados se puder.
Já escreveu um guião para testar as capacidades de cálculos matemáticos, mas faltam algumas funções)