Invalid Argument Error when broadcasting a transaction with Bitcore When I try to broadcast a transaction, I'm having this error: 

/home/aziz/node_modules/bitcore-explorers/node_modules/bitcore-lib/lib/util/preconditions.js:14       
throw new errors.InvalidArgument(argumentName, message, docsPath);       
^ 
Invalid Argument Error
at NodeError (/home/aziz/node_modules/bitcore-explorers/node_modules/bitcore-lib/lib/errors/index.js:20:41)
at Object.checkArgument (/home/aziz/node_modules/bitcore-explorers/node_modules/bitcore-lib/lib/util/preconditions.js:14:13)
at Insight.broadcast (/home/aziz/node_modules/bitcore-explorers/lib/insight.js:96:5)
at /home/aziz/node_modules/megachain-bitcoin.js:39:12
at Request._callback (/home/aziz/node_modules/bitcore-explorers/lib/insight.js:80:12)
at Request.self.callback (/home/aziz/node_modules/bitcore-explorers/node_modules/request/request.js:188:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:194:7)
at Request.&lt;anonymous&gt; (/home/aziz/node_modules/bitcore-explorers/node_modules/request/request.js:1171:10)
at emitOne (events.js:96:13)
at Request.emit (events.js:191:7)
at IncomingMessage.&lt;anonymous&gt; (/home/aziz/node_modules/bitcore-explorers/node_modules/request/request.js:1091:12)
at Object.onceWrapper (events.js:293:19)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:188:7)
at endReadableNT (_stream_readable.js:975:12)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9)


And this is my code:

var bitcore = require('bitcore-lib');
var explorers = require('bitcore-explorers');
var insight = new explorers.Insight('testnet');

    var sendBTC = function (SenderPrivateKey, SenderAddress, ReceiverAddress, Amount) //adresses in string format
    { 
        SenderPrivateKey = new bitcore.PrivateKey(SenderPrivateKey,'testnet');
        ReceiverAddress = new bitcore.Address(ReceiverAddress,'testnet');
        SenderAddress = SenderPrivateKey.toAddress();
        console.log(SenderPrivateKey);
        console.log(SenderAddress);
        console.log(ReceiverAddress);

        insight.getUnspentUtxos(SenderAddress, function(err, utxos) {
            if (err) {
                console.log(err);
            } else {
                var tx = bitcore.Transaction();
                tx.from(utxos);
                tx.to(ReceiverAddress, 500000);
                tx.change(SenderAddress);
                tx.sign(SenderPrivateKey);
                tx.serialize();

                insight.broadcast(tx, function(err, txId) {
                    if (err) {
                        console.log('Error!:'+err);
                    } else {
                        console.log('Successfully sent: '+txId);
                    }
                });

            }
        });
    }


Can someone help me? thanks!
Either create the transaction using constructor:

var transaction = new Transaction();

or pass serialized transaction to broadcast method:

insight.broadcast(tx.serialize(), ......